300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > android怎么监听多点触摸_Android多点触摸交互处理

android怎么监听多点触摸_Android多点触摸交互处理

时间:2024-04-19 01:12:40

相关推荐

android怎么监听多点触摸_Android多点触摸交互处理

触摸操作是安卓最基本的交互方法,掌握多点触摸的开发可增强应用交互体验。首先需要了解触摸事件的侦听和传递,同时,本文介绍了单点、多点触摸的使用方法,并在此基础上,使用多点触控完成了一个缩放照片的简单例子。

1.触摸事件的侦听

初始化页面根布局,通过findViewById查找到privateRelativeLayoutroot;

root= (RelativeLayout) findViewById(R.id.activity_main);

设置触摸监听器,区别于点击监听器,复写onTouch方法,根据getAction判断触摸的类型,并执行相应的操作。//侦听触摸事件,onTouchListener

root.setOnTouchListener(newView.OnTouchListener() {@Override

public booleanonTouch(View v,MotionEvent event) {

//根据event.getAction判断触摸类型

switch(event.getAction()){

//触摸按下事件

caseMotionEvent.ACTION_DOWN:

System.out.println("action down");

break;//触摸移动事件

caseMotionEvent.ACTION_MOVE:

System.out.println("action move");

break;//触摸弹起事件

caseMotionEvent.ACTION_UP:

System.out.println("action up");

break;

}

2.触摸事件的传递

触摸事件触发有顺序的依赖关系,先触发action down,再触发action move,最后触发action up

当onTouch方法返回false时,即表示后续事件不触发。返回值为true时,会触发相应的后续事件

3.获取一个android触摸点坐标

通过event.getX()和event.getY()获取单个触摸点的坐标

例如在action move事件中,输出当前坐标,右下方x,y坐标越大//越向右下方移动,x坐标与y坐标越大

System.out.println(String.format("x:%f,y:%f",event.getX(),event.getY()));

移动图片功能的实现

通过设置imageView的布局参数,设置当前触摸的x,y坐标为左部和上部的空白,在action move事件中实现图片移动//创建iv的布局参数对象

RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams)iv.getLayoutParams();

//设置子视图在根布局中的左侧空白,为当前触摸位置

lp.leftMargin= (int) event.getX();

//设置子视图在根布局中的上部空白,为当前触摸位置

lp.topMargin= (int) event.getY();

//设置imageView的布局参数

iv.setLayoutParams(lp);

4.获取多个android触摸点坐标

通过event.getPointerCount,可以获得触摸点的个数//获取触摸点的个数

System.out.println("point count: "+event.getPointerCount());

通过event.getX(index),添加索引可以获得不同控制点的坐标System.out.println(String.format

("x1:%f,y1:%f x2:%f,y2:%f",event.getX(0),event.getY(0),event.getX(1),event.getY(1)));

5.缩放图片示例

通过判断两个触控点之间的距离来实现,两点间距离增大时,放大图片,否则缩小图片

设置两个点当前距离变量与上一次操作后两点距离变量//两个触控点之间当前的距离

private floatcurrentDistence;

//两个触控点之间上一次操作后的距离

private floatlastDistence;

当触控点大于等于两个时,根据两点间距离公式计算两点之间距离

if(event.getPointerCount()>=2){

//两触控点之间的x偏移量和y偏移量

floatoffsetX = event.getX(0)-event.getY(1);

floatoffsetY = event.getY(0)-event.getY(1);

//计算两点之间的距离

currentDistence= (float) Math.sqrt(offsetX*offsetX+offsetY*offsetY);

根据lastDistance与currentDistance的大小关系判断放大还是缩小,通过iv的layoutParams改变iv的参数从而改变iv的大小

//避免实际操作中,距离计算的误差,使用两次距离差大于或小于5作为判断依据

if(currentDistance-lastDistance>5){

System.out.println("放大");

//设置imageView布局参数

RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams)iv.getLayoutParams();

//放大时宽度与高度需要使用getHeight与getWidth获取到当前真实的高度与宽度

//需要使用明确浮点数进行乘法

lp.width= (int) (1.1f*iv.getWidth());

lp.height= (int) (1.1f*iv.getHeight());

iv.setLayoutParams(lp);

//更新lastDistence的值

lastDistance=currentDistance;

}else if(lastDistance-currentDistance>5){

System.out.println("缩小");

RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams)iv.getLayoutParams();

lp.height= (int) (0.9f*iv.getHeight());

lp.width= (int) (0.9f*iv.getWidth());

iv.setLayoutParams(lp);

lastDistance=currentDistance;

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。