展会信息港展会大全

第17天 Android Touch事件学习 4 获取手指触摸位置
来源:互联网   发布日期:2015-09-29 10:38:30   浏览:2609次  

导读:触摸事件学习系列文章详见:《Android Touch事件学习系列汇总》 还是回到onTouchEvent方法传递的参数MotionEvent类,其对象有四个方法可以获取...

触摸事件学习系列文章详见:

《Android Touch事件学习系列汇总》

还是回到onTouchEvent方法传递的参数MotionEvent类,其对象有四个方法可以获取当前手指在屏幕上的位置信息,但是一个是相对地址一个是绝对地址,以下具体看下区别。

一、Android Touch事件rawX,rawY与x,y的区别

MotionEvent有四个方法getRawX(), event.getRawY(), getX(),getY(), 为什么同样是x,y轴干嘛非得用两个变量呢?

先来看下效果图:

从上图可以看出来

rawX 和 rawY分别是中间触摸点以屏幕左上角为0,0的相对位置,rawX = 223 说明里触摸点离屏幕最左侧的距离是223

x 和 y 分别是触摸点以灰色区域左上角为0,0的相对位置,x = 96 说明是触摸点离灰色区域最左侧的距离是96

rawX , rawY 相对于屏幕的坐标

x,y 相对于当前控件的坐标

rawX, X 向右移动都是增大,向左移动都是减小

rawY, Y 向下移动都是增大,向上移动都是减小

二、效果图对应代码

1.中间的灰色区域是一个自定义TextView,用于监听Touch事件,里面有一个LogListener接口,用于在Actvity中实时Touch位置输出信息

public class CustomTextView extends TextView {

private LogListener mLogListener;

public CustomTextView(Context context) {

super(context);

}

public CustomTextView(Context context, AttributeSet attrs) {

super(context, attrs);

}

public CustomTextView(Context context, AttributeSet attrs, int defStyle) {

super(context, attrs, defStyle);

}

public void setLogListener(LogListener pListener) {

mLogListener = pListener;

}

@Override

public boolean onTouchEvent(MotionEvent event) {

int action = event.getAction();

switch (action) {

case MotionEvent.ACTION_MOVE:

float rawX = event.getRawX();

float rawY = event.getRawY();

float x = event.getX();

float y = event.getY();

if (mLogListener != null) {

mLogListener.output("rawX = " + rawX

+ "\n rawY = " + rawY

+ "\n x = " + x

+ "\n Y = " + y);

}

break;

}

return true;

}

/**

*用于在Actvity中实时Touch位置输出信息

*/

public interface LogListener {

public void output(String pOutput);

}

}

2. 在AndroidManifast.xml中配置布局

3. Activity中加载视图,控制显示touch位置信息

public class TouchDemoActivity extends Activity {

private TextView mOutput;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

mOutput = (TextView) findViewById(R.id.output);

mOutput.setText("rawX = 0 \n rawY = 0 \n x = 0 \n Y = 0");

CustomTextView customTextView = (CustomTextView) findViewById(R.id.custom_textview);

customTextView.setLogListener(new CustomLogListener());

}

/**

* 用于获取TouchEvent中位置信息

*/

private class CustomLogListener implements LogListener {

@Override

public void output(String pOutput) {

mOutput.setText( pOutput );

}

}

}

赞助本站

人工智能实验室

相关热词: android开发 教程

AiLab云推荐
推荐内容
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港