当我们需要实现触摸事件的时候,通常就会想到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);

android 组件内部实现触摸事件,更改背景的更多相关文章

  1. javascript触摸事件touch使用

    详细内容请点击 Apple在iOS 2.0中引入了触摸事件API,Android正迎头赶上这一事实标准,缩小差距.最近一个W3C工作组正合力制定这一触摸事件规范.        在本文深入研究iOS和 ...

  2. Android学习之多点触摸并不神秘

    最近研究了一下多点触摸,写了个利用多点触摸来控制图片大小和单点触摸控制图片移动的程序,和大家分享分享. Android中监听触摸事件是onTouchEvent方法,它的参数为MotionEvent,下 ...

  3. 一个demo让你彻底理解Android触摸事件的并发

    注:本文涉及的demo的地址:https://github.com/absfree/TouchDispatch 1. 触摸动作及事件序列 (1)触摸事件的动作 触摸动作一共有三种:ACTION_DOW ...

  4. Android触摸事件的应用

    前言 上一篇讲了Android触摸事件的传递机制,具体可以看这里 初识Android触摸事件传递机制.既然知道Android中触摸事件的传递分发,那么它能解决什么样的问题,在我们实际开发中如何应用,这 ...

  5. 一个demo让你彻底理解Android中触摸事件的分发

    注:本文涉及的demo的地址:https://github.com/absfree/TouchDispatch 1. 触摸动作及事件序列 (1)触摸事件的动作 触摸动作一共有三种:ACTION_DOW ...

  6. Android 手势&amp;触摸事件 MotionEvent

    1.http://blog.csdn.net/omg_2012/article/details/7881443 这篇相当好啊 2.http://blog.csdn.net/android_tutor/ ...

  7. 初识Android触摸事件传递机制

    前言 今天总结的一个知识点是Andorid中View事件传递机制,也是核心知识点,相信很多开发者在面对这个问题时候会觉得困惑,另外,View的另外一个难题滑动冲突,比如在ScrollView中嵌套Li ...

  8. Android 手势&触摸事件

    在刚开始学Android的时候,就觉得Google的文档不咋样,在研究手势时,更加的感觉Google的文档写得实在是太差了.很多常量,属性和方法,居然连个描述都没有. 没有描述也就罢了,但是OnGes ...

  9. Android触摸事件传递机制

    简单梳理一下Android触摸事件传递机制的知识点. 一.View与ViewGroup的关系 View和ViewGroup二者的继承关系如下图所示: View是Android中最基本的一种UI组件,它 ...

随机推荐

  1. centos安装zabbix集群监控(亲测无坑版)

    一. 安装lemp环境 下载安装包:wget bbs.linuxtone.org/docs/autoinstall/lemp_auto_v1.0.6.tar.gz 包解压:tar zxvf lemp_ ...

  2. 于CentOS 6 安装 Wordpress

    1.两种方式给Wordpress 首先,你可以去wordpress最新的官方网站看看wordpress多少下载.例wordpress 3.9.1下载地址: http://cn.wordpress.or ...

  3. 移植MonkeyRunner的图片对比和获取子图功能的实现-UiAutomator/Robotium篇

    根据前一篇文章<移植MonkeyRunner的图片对比和获取子图功能的实现-Appium篇>所述,因为Appium和MonkeyRunner有一个共同点--代码控制流程都是在客户端实现的. ...

  4. AngulaJS实战

    AngulaJS实战总结, 带你进入AngularJS世界(待续)   使用AngularJS  进行Hybrid App 开发已经有一年多时间了,这里做一个总结. 一.AngularJS 初始化加载 ...

  5. sql点滴38—SQL Server 2008和SQL Server 2008 R2导出数据的选项略有不同

    原文:sql点滴38—SQL Server 2008和SQL Server 2008 R2导出数据的选项略有不同 说明: 以前要将一个表中的数据导出为脚本,只有用存储过程.现在在SQL Server ...

  6. POJ 1655 Balancing Act 焦点树

    标题效果:鉴于一棵树.除去一个点之后,这棵树将成为一些中国联通的块.之后该点通过寻求取消最低形成块的最大数目. 思维:树DP思维.通过为每个子树尺寸的根节点深搜索确定.之后该节点然后除去,,还有剩下的 ...

  7. openSUSE13.1安装Nodejs并更新到最新版

    软件源中直接安装Nodejs即可 sudo zypper in nodejs 查看nodejs版本 sincerefly@linux-utem:~> node --version v0.10.5 ...

  8. Mysql高级之游标

    原文:Mysql高级之游标 什么是游标?select 语句也许一次性会取出来n条语句,那么游标便可以一次取出来select中的一条记录.每取出来一条,便向下移动一次!可以实现很复杂逻辑! 上面还有有一 ...

  9. RMAN duplicate from active 时遭遇 ORA-17627 ORA-12154

    最近在从活动数据库进行异机克隆时碰到了ORA-17629,ORA-17627,ORA-12154的错误,起初以为是一个Bug呢.Oracle Bug着实太多了,已经成了习惯性思维了.汗!错误提示是无法 ...

  10. ASP.NET WebApi 开放数据

    概述 开放式数据协议(OData) 是用于在 web 数据访问协议.它提供统一的方式来构造数据. 查询的数据和操纵数据集通过 CRUD 操作.它支持 AtomPub (XML) 和 JSON 格式.它 ...