转载:Android——ImageButton按下效果设计
?
使用?Button?时为了让用户有“按下”的效果,有两种实现方式:
?1.JAVA代码实现:
?
imageButton.setOnTouchListener(new OnTouchListener(){?????
??????????????????????? @Override????
??????????????????????? public boolean onTouch(View v, MotionEvent event) {?????
??????????????????????????????? if(event.getAction() == MotionEvent.ACTION_DOWN){?????
??????????????????????????????????????? //更改为按下时的背景图片?????
??????????????????????????????????????? v.setBackgroundResource(R.drawable.pressed);?????
??????????????????????????????? }else if(event.getAction() == MotionEvent.ACTION_UP){?????
??????????????????????????????????????? //改为抬起时的图片?????
??????????????????????????????????????? v.setBackgroundResource(R.drawable.released);?????
??????????????????????????????? }?????
??????????????????????????????? return false;?????
??????????????????????? }?????
??????????????? });???
?
?2.XML实现:
?
<?xml version="1.0" encoding="UTF-8"?>????
<selector xmlns:android="http://schemas.android.com/apk/res/android?">????
??? <item?????????? android:state_pressed="false"? android:drawable="@drawable/button_add" />????
??? <item?????????? android:state_pressed="true"?? android:drawable="@drawable/button_add_pressed" />????
??? <item?????????? android:state_focused="true"??? android:drawable="@drawable/button_add_pressed" />????
<item?????????? android:drawable="@drawable/button_add" />????
</selector>????
??
<?xml version="1.0" encoding="UTF-8"?>??
<selector xmlns:android="http://schemas.android.com/apk/res/android?">??
<item?????????? android:state_pressed="false"? android:drawable="@drawable/button_add" />??
??
??? <item??????????? android:state_pressed="true"? android:drawable="@drawable/button_add_pressed" />??
??? <item??????????? android:state_focused="true"? android:drawable="@drawable/button_add_pressed" />??
??? <item???????????? android:drawable="@drawable/button_add" />??
</selector>??
?
这个文件放在?drawable?目录下面。命名为?button_add_x.xml,使用方法如下:
?
<ImageButton????
??????????????????????? android:id="@+id/ImageButton"????
??????????????????????? android:layout_width="wrap_content"????
??????????????????????? android:layout_height="wrap_content"????
??????????????????????? android:background="#00000000"????
??????????????????????? android:src="@drawable/button_add_x" >????
</ImageButton>????
<ImageButton??
??????????????????????? android:id="@+id/ImageButton"??
??????????????????????? android:layout_width="wrap_content"??
??????????????????????? android:layout_height="wrap_content"??
??????????????????????? android:background="#00000000"??
??????????????????????? android:src="@drawable/button_add_x" >??
</ImageButton>?
?
?3.采用Drawable的颜色过滤:
?
/**???
?? * 按下这个按钮进行的颜色过滤???
?? */????
? public final static float[] BT_SELECTED=new float[] {??????
????? 2, 0, 0, 0, 2,??????
????? 0, 2, 0, 0, 2,??????
????? 0, 0, 2, 0, 2,??????
????? 0, 0, 0, 1, 0 };?????
???????
? /**???
?? * 按钮恢复原状的颜色过滤???
?? */????
? public final static float[] BT_NOT_SELECTED=new float[] {??????
????? 1, 0, 0, 0, 0,??????
????? 0, 1, 0, 0, 0,??????
????? 0, 0, 1, 0, 0,??????
????? 0, 0, 0, 1, 0 };?????
???????
? /**???
?? * 按钮焦点改变???
?? */????
? public final static OnFocusChangeListener buttonOnFocusChangeListener=new OnFocusChangeListener() {?????
???????
? @Override????
? public void onFocusChange(View v, boolean hasFocus) {?????
?? if (hasFocus) {?????
??? v.getBackground().setColorFilter(new ColorMatrixColorFilter(BT_SELECTED));?????
??? v.setBackgroundDrawable(v.getBackground());?????
?? }?????
?? else????
?? {?????
??? v.getBackground().setColorFilter(new ColorMatrixColorFilter(BT_NOT_SELECTED));?????
???? v.setBackgroundDrawable(v.getBackground());?????
?? }?????
? }?????
?};?????
??????
? /**???
?? * 按钮触碰按下效果???
?? */????
?public final static OnTouchListener buttonOnTouchListener=new OnTouchListener() {?????
? @Override????
? public boolean onTouch(View v, MotionEvent event) {?????
?? if(event.getAction() == MotionEvent.ACTION_DOWN){?????
??? v.getBackground().setColorFilter(new ColorMatrixColorFilter(BT_SELECTED));?????
??? v.setBackgroundDrawable(v.getBackground());?????
??? }?????
??? else if(event.getAction() == MotionEvent.ACTION_UP){?????
???? v.getBackground().setColorFilter(new ColorMatrixColorFilter(BT_NOT_SELECTED));?????
???? v.setBackgroundDrawable(v.getBackground());?????
??? }?????
?? return false;?????
? }?????
?};?????
??????
?/**???
? * 设置图片按钮获取焦点改变状态???
? * @param inImageButton???
? */????
?public final static void setButtonFocusChanged(View inView)?????
?{?????
? inView.setOnTouchListener(buttonOnTouchListener);?????
? inView.setOnFocusChangeListener(buttonOnFocusChangeListener);?????
?}????
/**?
?? * 按下这个按钮进行的颜色过滤?
?? */??
? public final static float[] BT_SELECTED=new float[] {???
????? 2, 0, 0, 0, 2,???
????? 0, 2, 0, 0, 2,???
????? 0, 0, 2, 0, 2,???
????? 0, 0, 0, 1, 0 };??
????
? /**?
?? * 按钮恢复原状的颜色过滤?
?? */??
? public final static float[] BT_NOT_SELECTED=new float[] {???
????? 1, 0, 0, 0, 0,???
????? 0, 1, 0, 0, 0,???
????? 0, 0, 1, 0, 0,???
????? 0, 0, 0, 1, 0 };??
????
? /**?
?? * 按钮焦点改变?
?? */??
? public final static OnFocusChangeListener buttonOnFocusChangeListener=new OnFocusChangeListener() {??
????
? @Override??
? public void onFocusChange(View v, boolean hasFocus) {??
?? if (hasFocus) {??
??? v.getBackground().setColorFilter(new ColorMatrixColorFilter(BT_SELECTED));??
??? v.setBackgroundDrawable(v.getBackground());??
?? }??
?? else??
?? {??
??? v.getBackground().setColorFilter(new ColorMatrixColorFilter(BT_NOT_SELECTED));??
???? v.setBackgroundDrawable(v.getBackground());??
?? }??
? }??
?};??
???
? /**?
?? * 按钮触碰按下效果?
?? */??
?public final static OnTouchListener buttonOnTouchListener=new OnTouchListener() {??
? @Override??
? public boolean onTouch(View v, MotionEvent event) {??
?? if(event.getAction() == MotionEvent.ACTION_DOWN){??
??? v.getBackground().setColorFilter(new ColorMatrixColorFilter(BT_SELECTED));??
??? v.setBackgroundDrawable(v.getBackground());??
??? }??
??? else if(event.getAction() == MotionEvent.ACTION_UP){??
???? v.getBackground().setColorFilter(new ColorMatrixColorFilter(BT_NOT_SELECTED));??
???? v.setBackgroundDrawable(v.getBackground());??
??? }??
?? return false;??
? }??
?};??
???
?/**?
? * 设置图片按钮获取焦点改变状态?
? * @param inImageButton?
? */??
?public final static void setButtonFocusChanged(View inView)??
?{??
? inView.setOnTouchListener(buttonOnTouchListener);??
? inView.setOnFocusChangeListener(buttonOnFocusChangeListener);??
?}?
?
转载:http://yueguc.iteye.com/blog/939686