触摸事件

1.1.触摸事件(必会)

?  拖拽

?  XML配置

<ImageView

android:id="@+id/image"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:scaleType="matrix"

android:src="@drawable/image" />

?  Java代码

public class MainActivity extends Activity {

private ImageView imageView;

@Override

protected void
onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

imageView = (ImageView) findViewById(R.id.image);

imageView.setOnTouchListener(new MyOnTouchListener());

}

private class
MyOnTouchListener implements OnTouchListener
{

private floatx;

private floaty;

private Matrix currentMatrix
= new Matrix(); // 用来操作图片的矩阵

private Matrix oldMatrix
= new Matrix();

public boolean
onTouch(View v, MotionEvent event) {

switch (event.getAction()) {

case MotionEvent.ACTION_DOWN:
        // 按下时

x = event.getX();               // 获取x轴坐标

y = event.getY();                  // 获取y轴坐标

oldMatrix.set(imageView.getImageMatrix());      // 记住位置

break;

case MotionEvent.ACTION_MOVE:
        // 移动时

currentMatrix.set(oldMatrix);
     // 设置成按下时记住的位置

currentMatrix.postTranslate(event.getX() - x, event.getY() - y); // 改变位置

break;

}

imageView.setImageMatrix(currentMatrix); // 移动图片

return true;

}

}

}

?  多点触摸

public class MainActivity extends Activity {

private ImageView imageView;

@Override

protected void
onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

imageView = (ImageView) findViewById(R.id.image);

imageView.setOnTouchListener(new MyOnTouchListener());

}

private class
MyOnTouchListener implements
OnTouchListener {

private floatx;      // 图片移动前的x轴坐标

private floaty;      // 图片移动前的y轴坐标

private Matrix currentMatrix
= new Matrix();    // 用来移动图片的矩阵

private Matrix oldMatrix
= new Matrix();     // 图片移动前的矩阵

private inttype;     // 操作类型, 一根手指触摸还是两根手指触摸

private floatstart;  // 第二根手指按下时的距离

private floatend;    // 两根手指移动后的距离

private PointF point; // 放大时的中心点

public boolean
onTouch(View v, MotionEvent event) {

switch (event.getAction() & MotionEvent.ACTION_MASK) {

case MotionEvent.ACTION_DOWN:

type = 1;

x = event.getX();

y = event.getY();

oldMatrix.set(imageView.getImageMatrix());

break;

case MotionEvent.ACTION_MOVE:

currentMatrix.set(oldMatrix);

if (type ==
1) {   // 1根手指触摸

currentMatrix.postTranslate(event.getX() - x, event.getY() - y);

}
else {        // 2跟手指触摸

end = countDistance(event); // 计算结束时距离

float scale = end
/ start;      // 计算缩放比例

currentMatrix.postScale(scale, scale, point.x, point.y); // 设置缩放

}

break;

case MotionEvent.ACTION_POINTER_DOWN:

type = 2;

start = countDistance(event);      // 计算开始时距离

point = countPoint(event);         // 计算中心点

oldMatrix.set(imageView.getImageMatrix());

break;

}

imageView.setImageMatrix(currentMatrix); // 改变图片

return true;

}

}

public float
countDistance(MotionEvent event) {

float a = event.getX(1) - event.getX(0); // x轴距离

float b = event.getY(1) - event.getY(0); // y轴距离

return (float)
Math.sqrt(a * a + b * b); // 勾股定理

}

public PointF countPoint(MotionEvent event) {

float x = (event.getX(0) + event.getX(1)) / 2;

// x轴中间点

float y = (event.getY(0) + event.getY(1)) / 2;

// y轴中间点

return new
PointF(x, y);

}

}

来自为知笔记(Wiz)

时间: 2024-11-07 23:55:46

触摸事件的相关文章

屏幕触摸事件监听,判断上下左右的操作行为,判断方法缩小的操作行为

在手机屏幕上能够实现的人机交互行为,大致包括点击按钮,拉动滑动块,物体缩放,上下左右拉动等. 手机屏幕触摸事件的监听方法: 1.首先要设置一块布局区域,frameLayout/LinearLayout等都可以,并为布局设置id: 2.在Activity中声明相应的布局类型,并通过findViewById()方法找到该布局,然后为该布局区域设置setOnTouchListener()方法,就能监听在相应屏幕触摸操作 实现屏幕触摸事件监听的代码: private LinearLayout Land;

5.触摸事件、侧滑菜单

触摸事件 侧滑菜单--- github-SlidingMenu 1.在ViewGroup中,让自己内容移动有以下三个方法个方法: layout(l,t,r,b); offsetTopAndBottom(offset)和offsetLeftAndRight(offset); scrollTo和scrollBy方法; 注意:滚动的并不是viewgroup内容本身,而是它的矩形边框 它是瞬间移动的 2.在自定义ViewGroup中一般不需要去实现onMeasure, 我们去实现系统已有的ViewGro

cocos2d-x 3.x之触摸事件

Layer类的一个重要作用就是接受输入事件,它封装了触摸输入的处理接口.一般情况下,我们可以通过setTouchEnabled方法来开启或关闭接收触摸输入.事实上并不是只有Layer才支持接收触摸事件,任何一个游戏元素都可以接收事件,只不过Layer提供了现成的支持. 我们只需通过创建一个事件监听器用来实现各种触发后的逻辑,然后添加到事件分发器_eventDispatcher中,所有事件监听器由这个分发器统一管理,即可完成事件响应. 为一个精灵添加触摸事件的四个步骤 1.创建一个精灵 2.创建一

Android 手势&amp;触摸事件

在刚开始学Android的时候,就觉得Google的文档不咋样,在研究手势时,更加的感觉Google的文档写得实在是太差了.很多常量,属性和方法,居然连个描述都没有.没有描述也就罢了,但是OnGestureListener里手势这么多,它也没有一个介绍说明,在没有进行不断才尝试之前,谁能搞懂onLongPress和onShowPress,onScroll和onFling的关系与差别吗?Google真的需要在文档方面做一次大手术了.不过好在经过鄙人不断反复的尝试.从个人的角度为这几个手势动作做出了

移动端常用触摸事件以及常用坐标

一.触摸事件 基本事件: touchstart   //手指刚接触屏幕时触发 touchmove    //手指在屏幕上移动时触发 touchend     //手指从屏幕上移开时触发 下面这个比较少用: touchcancel  //触摸过程被系统取消时触发 每个事件都有以下列表,比如touchend的targetTouches当然是 0 咯: touches         //位于屏幕上的所有手指的列表 targetTouches   //位于该元素上的所有手指的列表 changedTou

UITouch触摸事件

UITouch触摸事件 主要为三个方法 1.-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{2.3. UITouch *touch = [touches anyObject];4. CGPoint point = [touch locationInView:self];5. start = point;6. end = point;7.8.}9.10.-(void)touchesMoved:(NSSet *)touc

深入了解触摸事件的分发

1. 触摸动作及事件序列 (1)触摸事件的动作 触摸动作一共有三种:ACTION_DOWN.ACTION_MOVE.ACTION_UP.当用户手指接触屏幕时,便产生一个动作为ACTION_DOWN的触摸事件,此时若用户的手指立即离开屏幕,会产生一个动作为ACTION_UP的触摸事件:若用户手指接触屏幕后继续滑动,当滑动距离超过了系统中预定义的距离常数,则产生一个动作为ACTION_MOVE的触摸事件,系统中预定义的用来判断用户手指在屏幕上的滑动是否是一个ACTION_MOVE动作的这个距离常量叫

QUICK 中的触摸事件

本文转载于:http://www.cocos2d-x.org/docs/manual/framework/quick/V3/touch-events/zh Cocos2d-x 原本的触摸机制存在一些限制,在使用中需要开发者做不少额外的处理.所以 Quick-Cocos2d-x 提出了自己的一套触摸机制.本文详细介绍了这套新机制的用法. 显示层级 在 Cocos2d-x 里,整个游戏的画面是由一系列的 Scene, Node, Sprite, Layer 等对象构成的.而所有这些对象都是从 Nod

touches,motion触摸事件响应

//触摸事件响应需要重写方法 1 // 触摸时触发该方法(消息发送) 2 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ 3 UITouch *touch = [touches anyObject]; 4 CGPoint point = [touch locationInView:self.rootView.touchView];//locationInView:得到当前点击下在指定视图中