首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 平面设计 > 图形图像 >

ImageButton 点击成效实现

2012-09-28 
ImageButton 点击效果实现使用Button时为了让用户有“按下”的效果,有两种实现方式:1.在代码里面。view plain

ImageButton 点击效果实现

使用Button时为了让用户有“按下”的效果,有两种实现方式:

1.在代码里面。

view plain

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; ? ??

?? ? ? ? ? ? ? ? ? ? ? ?} ? ??

?? ? ? ? ? ? ? ?}); ? ?

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文件实现。

view plain

<?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

使用的时候

view plain

<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> ??

?

【以上为引用网络,来源:http://www.eoeandroid.com/thread-7931-1-1.html】

?

【以下为原创,转载请注明出处:http://blog.csdn.net/sytzz/archive/2010/06/16/5673662.aspx】

?

我自己摸索摸索,发现这样的实现过程虽然通用性好,但是很麻烦,一个按钮实现效果需要多张图片甚至再加一个布局…

?

那一个游戏要是有几百个按钮怎么办呢?

?

于是:以下代码被酝酿出来了:

?

view plain

?

??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; ? ??

??} ? ??

?}; ? ??

?

?

?public final static void setButtonFocusChanged(View inView) ? ??

?{ ? ??

??inView.setOnTouchListener(buttonOnTouchListener); ? ??

??inView.setOnFocusChangeListener(buttonOnFocusChangeListener); ? ??

?} ? ?

?

使用时,调用方法

public final static void setButtonFocusChanged(View inView)

即可。

?

【原理】

?

利用Drawable类的setColorFilter方法对图片进行颜色偏移过滤处理。

热点排行