1.多点触控的响应事件
public class MainActivity extends AppCompatActivity {
private ImageView girl=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
girl=findViewById(R.id.img);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getPointerCount()==2){
Log.d("jian", "坐标1:X="+event.getX(0)+"坐标1:Y="+event.getY(0));
Log.d("jian", "坐标2:X="+event.getX(1)+"坐标2:Y="+event.getY(1));
}
return true;
}
}
结果是:
03-24 20:39:09.497 22491-22491/com.fengray.myex028multitouch D/jian: 坐标1:X=721.3321坐标1:Y=904.5289
03-24 20:39:09.497 22491-22491/com.fengray.myex028multitouch D/jian: 坐标2:X=517.5208坐标2:Y=830.5674
03-24 20:39:09.497 22491-22491/com.fengray.myex028multitouch D/jian: 坐标1:X=721.3321坐标1:Y=900.53094
03-24 20:39:09.497 22491-22491/com.fengray.myex028multitouch D/jian: 坐标2:X=517.5208坐标2:Y=830.5674
2.多点触控之图片缩放
创建的图片要用surfaceView进行包装
public class MainActivity extends AppCompatActivity {
private static final int SCALE_BASIC=3;//每次调整的比例
private ImageView img=null;
private int imageX=0;//图片的x轴
private int imageY=0;
private int imageWidth=0;
private int imageHeight=0;
private int screenWidth=0;
private int screenHeight=0;
private Bitmap bitmap=null;
private SurfaceHolder surfaceHolder=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
img=new ImageView(this);
screenWidth=getWindowManager().getDefaultDisplay().getWidth();//获取手机屏幕宽度
screenHeight=getWindowManager().getDefaultDisplay().getHeight();
//从资源文件中获取一张图片
bitmap= BitmapFactory.decodeResource(getResources(),R.drawable.girl);
imageWidth=bitmap.getWidth();//用获得的图片再获取其宽高
imageHeight=bitmap.getHeight();
//获取图像起点坐标,左上角点
imageX=(int)((screenWidth-imageWidth)/2);
imageY=(int)((screenHeight-imageHeight)/2);
img.setImageBitmap(bitmap);//设置显示的图片
//将布局页面设置为自定义的surfaceView
setContentView(new MysurfaceView(this));
getSupportActionBar().hide();//取消标题栏
}
//图像需要在surfaceView中进行包装
private class MysurfaceView extends SurfaceView implements SurfaceHolder.Callback{
public MysurfaceView(Context context) {
super(context);
surfaceHolder=super.getHolder();
surfaceHolder.addCallback(this);
setFocusable(true);//获得焦点,进行触摸事件
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
setImage(1.0f,150,300);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
}
private void setImage(float scale,int width,int height){
Canvas canvas=surfaceHolder.lockCanvas();//获取画布
Matrix martix=new Matrix();
Paint paint=new Paint();
//绘制矩形(一个底色),解决缩放时的重影问题
canvas.drawRect(0,0,screenWidth,screenHeight,paint);
//缩放图形
martix.postScale(scale, scale);//等量的缩放比例,宽高都缩放相同的量
//从原图的0,0位置,取width和height的宽度,设置martix缩放
Bitmap newimg=Bitmap.createBitmap(bitmap,0,0,width,height,martix,true);
imageWidth=newimg.getWidth();
imageHeight=newimg.getHeight();
Log.d("jian", "screen widht and height: "+screenWidth+" "+screenHeight);
Log.d("jian", "mage width and height: "+imageWidth+" "+imageHeight);
//重新定义图片的x,y轴偏移量
this.imageX=(int)((this.screenWidth-this.imageWidth)/2);
this.imageY=(int)((this.screenHeight-this.imageHeight)/2);
Log.d("jian", "image x and y: "+imageX+" "+imageY);
//执行偏移,平移到指定的位置
canvas.translate(this.imageX,this.imageY);
canvas.drawBitmap(bitmap,martix,paint);
//解锁并输出图像
surfaceHolder.unlockCanvasAndPost(canvas);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
int pintcount=event.getPointerCount();
if (pintcount==2){
float pointA=event.getY(0);
float pointB=event.getY(1);
if (pointA<pointB){
float temp=pointA;
pointA=pointB;
pointB=temp;//大数为B点
}
if (!(event.getAction()==MotionEvent.ACTION_UP)){//当按下的时候
float scale=getScale(pointA,pointB)/SCALE_BASIC;//调整的最终比例
setImage(scale,150,300);
}
}
return true;
}
private float getScale(float pointA,float pointB){
float scale=pointA/pointB;
return scale;
}
}
结果是得到一张可以用手指缩放的照片