android 组件内部实现触摸事件,更改背景

当我们需要实现触摸事件的时候,通常就会想到OnTouchEvent这个方法,它能够获取触摸点的坐标,而组件同样也有这样的一个功能,使用这个功能,可以实现组件在父布局界面上移动,缩放,更改背景图片。这里通过一个小例子来实现利用组件的onTouchEvent事件实现点击组件左半部分更改左边图片,点击组件右半部分更改右边图片。

if (v == CamMove_UD_Btn) {
	if (event.getAction() == MotionEvent.ACTION_DOWN) {
		if (event.getX() <= btn_in_bottom_width_center) { //这个是组件宽度的一半
			CamMove_UD_Btn.setBackgroundResource(R.drawable.cam_up);
		}else {
			CamMove_UD_Btn.setBackgroundResource(R.drawable.cam_down);
						
		}
		CamMove_UD_Btn_Click = true;//使用这个变量的目的就是:有时手指从水平位置滑动到组件到,没有检测到Down事件,但是松开手后就会检测到UP
	}else if (CamMove_UD_Btn_Click && event.getAction() == MotionEvent.ACTION_UP) {
		CamMove_UD_Btn.setBackgroundResource(R.drawable.cam_off);
		CamMove_UD_Btn_Click = false;
	}
}


其实思路是很简单的。获取手电级的位置,如果组件是横向的,获取X坐标,如果小于组件的一半则认为是左边,如果大于一般则认为是右边。

下面是对于组件自己的移动

imagebutton.setOnTouchListener(new OnTouchListener() {  
            int[] postion = new int[] { 0, 0 };  
            @Override  
            public boolean onTouch(View v, MotionEvent event) {  
                int x = (int) event.getRawX();  
                int y = (int) event.getRawY();  
                int left = v.getLeft();  
                int top = v.getTop();  
                switch (event.getAction()) {  
                case MotionEvent.ACTION_DOWN:  
                    postion[0] = (int) event.getX();  
                    postion[1] = y - v.getTop();  
                    break;  
  
                case MotionEvent.ACTION_MOVE:  
                    v.layout(x - postion[0], y - postion[1], x + 1024  
                            - postion[0], y - postion[1] + 768);  
                    v.postInvalidate();  
                    default:break;  
                }  
                return false;  
            }  
  
        });  


下面是布局的移动

            x=x+10;  
            y=y+10;  
            LayoutParams layoutParams=mIconPinpu.getLayoutParams();  //获取布局的布局参数
            layoutParams.height=x;  
            layoutParams.width=y;  
            mIconPinpu.setLayoutParams(layoutParams);  



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值