多点触控介绍以及程序代码
来源:互联网 发布:后期视频制作软件 编辑:程序博客网 时间:2024/06/05 11:03
实现onTouch(View view, MotionEventevent)的方法,就可以获取触屏的感应事件了。
在该事件中,有两个参数可以用来获取对触摸的控制,这两个参数分别为:MotionEvent.getAction()和MotionEvent.ACTION_MASK,前者用于对单点触控进行操作,后者用于对多点触控进行操作,相应地,我们可以通过AndroidDevelopers’Reference看到,对于单点触控,我们由MotionEvent.getAction()可以得到以下几种事件:ACTION_DOWN、ACTION_UP,而对于多点触控,由MotionEvent.ACTION_MASK,我们可以得到:ACTION_POINTER_DOWN、ACTION_POINTER_UP,都是MotionEvent中的常量,可以直接调用。而有些常量则是单点和多点共用的,如:ACTION_MOVE,因此在按下时,我们必须标记单点与多点触控的区别。
package map2.intel;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.graphics.PointF;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.FloatMath;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
public class Map2Activity extends Activity {
TextView view;
ImageView imgView;
ImageView imgStarView;
private EditText nameEditText;
private EditText passwordEditText;
RelativeLayout reLayout;
DisplayMetrics dm = new DisplayMetrics();
final static float scale =Resources.getSystem().getDisplayMetrics().density;
int mapWidth;
int mapHight;
int phoneMapWidth;
int phoneMapHight;
int leftTopLocationX;
int leftTopLocationY;
int phoneMapLocationX;
int phoneMapLocationY;
private static final int NONE = 0;
private static final int DRAG = 1;
private static final int ZOOM = 2;
private int mode = NONE;
private float oldDist;
private Matrix matrix = new Matrix();
private Matrix savedMatrix = new Matrix();
private PointF start = new PointF();
private PointF mid = new PointF();
float scale2;
private static final int OPTION_Setting = 0;
{
@Override
public boolean onTouch(View v, MotionEvent event)
{
float[] values = new float[9];
ImageView view = (ImageView) v;
switch (event.getAction() &MotionEvent.ACTION_MASK)
{
case MotionEvent.ACTION_DOWN:
savedMatrix.set(matrix);
start.set(event.getX(), event.getY());
mode = DRAG;
values = new float[9];
matrix.getValues(values);
break;
case MotionEvent.ACTION_UP:
mode = NONE;
break;
case MotionEvent.ACTION_POINTER_UP:
phoneMapLocationX=(int)(phoneMapLocationX*scale2);
phoneMapLocationY=(int)(phoneMapLocationY*scale2);
mode = NONE;
// if()
break;
case MotionEvent.ACTION_POINTER_DOWN:
oldDist = spacing(event);
if (oldDist > 10f)
{
savedMatrix.set(matrix);
midPoint(mid, event);
mode = ZOOM;
values = new float[9];
matrix.getValues(values);
}
break;
case MotionEvent.ACTION_MOVE:
if (mode == DRAG)
{
System.out.println("View移动");
matrix.set(savedMatrix);
matrix.postTranslate(event.getX() - start.x,
event.getY() - start.y);
values = new float[9];
matrix.getValues(values);
imgStarView.setPadding((int)(values[2]+phoneMapLocationX),(int)(values[5]+phoneMapLocationY),0,0);
}
else if (mode == ZOOM)
{
float newDist = spacing(event);
if (newDist > 10f)
{
matrix.set(savedMatrix);
scale2 = newDist /oldDist;//scale<1,reduce;scale>1,magnify
matrix.postScale(scale2, scale2, mid.x, mid.y);
matrix.getValues(values);
imgStarView.setPadding((int)(values[2]+phoneMapLocationX*scale2),(int)(values[5]+phoneMapLocationY*scale2),0,0);
}
}
break;
}
view.setImageMatrix(matrix);
return true;
}
private float spacing(MotionEvent event)
{
float x = event.getX(0) - event.getX(1);
float y = event.getY(0) - event.getY(1);
return FloatMath.sqrt(x * x + y * y);
}
private void midPoint(PointF point, MotionEvent event)
{
float x = event.getX(0) + event.getX(1);
float y = event.getY(0) + event.getY(1);
point.set(x / 2, y / 2);
}
});
public static int dipToPixel(int dip)
{
}
}
0 0
- 多点触控介绍以及程序代码
- 多点触控介绍以及程序代码
- 在模拟器中实现缩放以及多点触控
- Android中多点触控以及手势的基础知识
- Android中多点触控以及手势的基础知识
- Iphone多点触控知识和触控技术介绍
- Iphone多点触控知识和触控技术介绍
- 多点触控
- android多点触控
- Android多点触控
- 多点触控
- 触摸屏多点触控
- android 多点触控
- android 多点触控
- 多点触控参数
- 多点触控
- 多点触控
- android 多点触控
- Win7虚拟Wifi热点(设置后能连接wi…
- 怎么用迅雷下载百度网盘中的大文件…
- 将博客搬至CSDN
- struts2多文件上传
- maven环境配置
- 多点触控介绍以及程序代码
- android使用pull解析器读写xml文件…
- android下使用dom读写xml文件
- 写给爸的
- dos2unix命令
- onPreviewFrame的调用
- EditPlus 快捷键
- 戒指这个词的由来
- 中国人,你为什么不生气(一)