How to set button click effect in Android?

后端 未结 14 2294
佛祖请我去吃肉
佛祖请我去吃肉 2020-11-28 01:29

In Android, when I set background image to Button, I can not see any effect on button.

I need some effect on button so user can recognize that button is clicked.

相关标签:
14条回答
  • 2020-11-28 02:01

    Create bounce.xml file for animation

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
    
        <scale
            android:duration="100"
            android:fromXScale="0.9"
            android:fromYScale="0.9"
            android:pivotX="50%"
            android:pivotY="50%"
            android:toXScale="1.0"
            android:toYScale="1.0" />
    
    </set>
    

    Add this line in onClick to initialize

    final Animation myAnim = AnimationUtils.loadAnimation(this, R.anim.bounce); button.startAnimation(myAnim);

    You get the shrink effect in a button click.

    0 讨论(0)
  • 2020-11-28 02:02
    Step: set a button in XML with onClick Action:
    
     <Button
    android:id="@+id/btnEditUserInfo"
    style="?android:borderlessButtonStyle"
    android:layout_width="wrap_content"
    android:layout_height="@dimen/txt_height"
    android:layout_gravity="center"
    android:background="@drawable/round_btn"
    android:contentDescription="@string/image_view"
    android:onClick="edit_user_info"
    android:text="Edit"
    android:textColor="#000"
    android:textSize="@dimen/login_textSize" />
    
    Step: on button clicked show animation point
    //pgrm mark ---- ---- ----- ---- ---- ----- ---- ---- -----  ---- ---- -----
    
        public void edit_user_info(View view) {
    
            // show click effect on button pressed
            final AlphaAnimation buttonClick = new AlphaAnimation(1F, 0.8F);
            view.startAnimation(buttonClick);
    
            Intent intent = new Intent(getApplicationContext(),  EditUserInfo.class);
            startActivity(intent);
    
        }// end edit_user_info
    
    0 讨论(0)
  • 2020-11-28 02:05

    If you're using xml background instead of IMG, just remove this :

    <item>
        <bitmap android:src="@drawable/YOURIMAGE"/>
    </item>
    

    from the 1st answer that @Ljdawson gave us.

    0 讨论(0)
  • 2020-11-28 02:06

    Or using only one background image you can achive the click effect by using setOnTouchListener

    Two ways

    ((Button)findViewById(R.id.testBth)).setOnTouchListener(new OnTouchListener() {
    
          @Override
            public boolean onTouch(View v, MotionEvent event) {
              switch (event.getAction()) {
                  case MotionEvent.ACTION_DOWN: {
                      Button view = (Button) v;
                      view.getBackground().setColorFilter(0x77000000, PorterDuff.Mode.SRC_ATOP);
                      v.invalidate();
                      break;
                  }
                  case MotionEvent.ACTION_UP:
                      // Your action here on button click
                  case MotionEvent.ACTION_CANCEL: {
                      Button view = (Button) v;
                      view.getBackground().clearColorFilter();
                      view.invalidate();
                      break;
                  }
              }
              return true;
            }
    });
    

    And if you don't want to use setOnTouchLister, the another way of achieving this is

        myButton.getBackground().setColorFilter(.setColorFilter(0xF00, Mode.MULTIPLY);
    
        StateListDrawable listDrawable = new StateListDrawable();
        listDrawable.addState(new int[] {android.R.attr.state_pressed}, drawablePressed);
        listDrawable.addState(new int[] {android.R.attr.defaultValue}, myButton);
    
        myButton.setBackgroundDrawable(listDrawable);
    
    0 讨论(0)
  • 2020-11-28 02:09

    Create your AlphaAnimation Object that decides how much will be the fading effect of the button, then let it start in the onClickListener of your buttons

    For example :

    private AlphaAnimation buttonClick = new AlphaAnimation(1F, 0.8F);
    
    // some code
    
    public void onClick(View v) {
        v.startAnimation(buttonClick);
    }
    

    of course this is just a way, not the most preferred one, it's just easier

    0 讨论(0)
  • 2020-11-28 02:10

    To make your item consistent with the system look and feel try referencing the system attribute android:attr/selectableItemBackground in your desired view's background or foreground tag:

    <ImageView
        ...
        android:background="?android:attr/selectableItemBackground"      
        android:foreground="?android:attr/selectableItemBackground"
        ...
    />
    

    Use both attributes to get desired effect before/after API level 23 respectively.

    https://stackoverflow.com/a/11513474/4683601

    0 讨论(0)
提交回复
热议问题