自定义button的点击效果——颜色矩阵方法

关于这个效果,网上大致三种说法,前两种一个是java代码一个是xml方法,但是针对一个button还好说,每个都要有效果就相当麻烦了,不是要准备好多图片就是要准备好多xml文件。。还是颜色过滤这个方法比较实用~网上说的很详细,但我还是废了一点时间才理解。。把这部分代码完整的粘出来以后备用。。不过ImageButton用这个方法没有添加上效果。。暂时不知道什么原因。。

PS:button和ImageButton都可以用自定义的图案,顺便把button的给粘出来。。。


按下效果:(button 和 ImageButton均可使用 但和xml中的类型要一致 否则强退。。。)

public class LoginActivity extends Activity {    
	private Button login;
	private Button register;
	
    /**   按钮被按下  */
private final static float[] BUTTON_PRESSED = new float[] {      
		  2.0f, 0, 0, 0, -50,      
	      0, 2.0f, 0, 0, -50,      
	      0, 0, 2.0f, 0, -50,      
	      0, 0, 0, 5, 0 };     
	       
	  /**    按钮恢复原状   	   */    
private final static float[] BUTTON_RELEASED = new float[] {      
	      1, 0, 0, 0, 0,      
	      0, 1, 0, 0, 0,      
	      0, 0, 1, 0, 0,      
	      0, 0, 0, 1, 0 };  

private static final OnTouchListener touchListener = new OnTouchListener() {
		
		@Override
		public boolean onTouch(View v, MotionEvent event) {
			if(event.getAction() == MotionEvent.ACTION_DOWN) {
				v.getBackground().setColorFilter(new ColorMatrixColorFilter(BUTTON_PRESSED));
				v.setBackgroundDrawable(v.getBackground());
			}else if(event.getAction() == MotionEvent.ACTION_UP) {
				v.getBackground().setColorFilter(new ColorMatrixColorFilter(BUTTON_RELEASED));
				v.setBackgroundDrawable(v.getBackground());
			}
			return false;
		}
	};

public static void setButtonStateChangeListener(View v) {
		v.setOnTouchListener(touchListener);
	}

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login);
       login = (Button) findViewById(R.id.login);
       register = (Button) findViewById(R.id.zhuce);
        setButtonStateChangeListener(login);
        setButtonStateChangeListener(register);
    }
}


效果如下:

      


以上类型均为button,xml代码如下(设置background就行了~):

<Button
            android:id="@+id/login"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="10dip"
            android:layout_weight="1"
            android:background="@drawable/login_button" >
        </Button>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值