package com.bw.multi_point_touch_screen;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class MainActivity extends Activity {
private int widthPixels;
private int heightPixels;
private Bitmap bitmap;
int imageH;
int imageW;
int imageX;
int imageY;
private SurfaceHolder holder;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main);
// 获取屏幕的宽度和高度
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
// 宽度
widthPixels = displayMetrics.widthPixels;
// 高度
heightPixels = displayMetrics.heightPixels;
bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.a);
imageW = bitmap.getWidth();
imageH = bitmap.getHeight();
// 图片的地址
imageX = (widthPixels - imageW) / 2;
imageY = (heightPixels - imageH) / 2;
setContentView(new MySurface(this));
}
class MySurface extends SurfaceView implements SurfaceHolder.Callback {
public MySurface(Context context) {
super(context);
holder = getHolder();
holder.addCallback(this);
setFocusable(true);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
SetImage(1.0f, bitmap.getWidth(), bitmap.getHeight());
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
}
}
// 绘制图片
public void SetImage(float scalse, int width, int height) {
// 得到画布
Canvas canvas = holder.lockCanvas();
// 画布重绘
canvas.drawColor(Color.BLACK);
// 设置画笔
Paint paint = new Paint();
// 画矩形
canvas.drawRect(0, 0, width, height, paint);
// 得到marix类
Matrix matrix = new Matrix();
// 设置缩放比例
matrix.postScale(scalse, scalse);
// 得到缩放后的bitmap
Bitmap bitmap2 = Bitmap.createBitmap(bitmap, 0, 0, width, height,
matrix, true);
// 得到新的bitmap的宽度和高度,并且重新计算位置
imageW = bitmap2.getWidth();
imageH = bitmap2.getHeight();
imageX = (widthPixels - imageW) / 2;
imageY = (heightPixels - imageH) / 2;
// 平移过去
canvas.translate(imageX, imageY);
// 重新绘制bitmap
canvas.drawBitmap(bitmap, matrix, paint);
// 解锁
holder.unlockCanvasAndPost(canvas);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// 获取触控点个数
int pointerCount = event.getPointerCount();
// 两个点代表双点触控
if (pointerCount == 2) {
// 获取两个点的距离
float pointA = event.getX(0);
float pointB = event.getX(1);
// 判断哪个比较大
// 如果前面小于后面换
if (pointA < pointB) {
float t = pointA;
pointA = pointB;
pointB = t;
}
// 只要手指不太起来,就进行缩放
if (!(event.getAction() == MotionEvent.ACTION_UP)) {
float scale = getScale(pointA, pointB) / 3;
SetImage(scale, bitmap.getWidth(), bitmap.getHeight());
}
}
return super.onTouchEvent(event);
}
// 缩放比
public float getScale(float pointA, float pointB) {
float scale = pointA / pointB;
return scale;
}
}
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class MainActivity extends Activity {
private int widthPixels;
private int heightPixels;
private Bitmap bitmap;
int imageH;
int imageW;
int imageX;
int imageY;
private SurfaceHolder holder;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main);
// 获取屏幕的宽度和高度
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
// 宽度
widthPixels = displayMetrics.widthPixels;
// 高度
heightPixels = displayMetrics.heightPixels;
bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.a);
imageW = bitmap.getWidth();
imageH = bitmap.getHeight();
// 图片的地址
imageX = (widthPixels - imageW) / 2;
imageY = (heightPixels - imageH) / 2;
setContentView(new MySurface(this));
}
class MySurface extends SurfaceView implements SurfaceHolder.Callback {
public MySurface(Context context) {
super(context);
holder = getHolder();
holder.addCallback(this);
setFocusable(true);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
SetImage(1.0f, bitmap.getWidth(), bitmap.getHeight());
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
}
}
// 绘制图片
public void SetImage(float scalse, int width, int height) {
// 得到画布
Canvas canvas = holder.lockCanvas();
// 画布重绘
canvas.drawColor(Color.BLACK);
// 设置画笔
Paint paint = new Paint();
// 画矩形
canvas.drawRect(0, 0, width, height, paint);
// 得到marix类
Matrix matrix = new Matrix();
// 设置缩放比例
matrix.postScale(scalse, scalse);
// 得到缩放后的bitmap
Bitmap bitmap2 = Bitmap.createBitmap(bitmap, 0, 0, width, height,
matrix, true);
// 得到新的bitmap的宽度和高度,并且重新计算位置
imageW = bitmap2.getWidth();
imageH = bitmap2.getHeight();
imageX = (widthPixels - imageW) / 2;
imageY = (heightPixels - imageH) / 2;
// 平移过去
canvas.translate(imageX, imageY);
// 重新绘制bitmap
canvas.drawBitmap(bitmap, matrix, paint);
// 解锁
holder.unlockCanvasAndPost(canvas);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// 获取触控点个数
int pointerCount = event.getPointerCount();
// 两个点代表双点触控
if (pointerCount == 2) {
// 获取两个点的距离
float pointA = event.getX(0);
float pointB = event.getX(1);
// 判断哪个比较大
// 如果前面小于后面换
if (pointA < pointB) {
float t = pointA;
pointA = pointB;
pointB = t;
}
// 只要手指不太起来,就进行缩放
if (!(event.getAction() == MotionEvent.ACTION_UP)) {
float scale = getScale(pointA, pointB) / 3;
SetImage(scale, bitmap.getWidth(), bitmap.getHeight());
}
}
return super.onTouchEvent(event);
}
// 缩放比
public float getScale(float pointA, float pointB) {
float scale = pointA / pointB;
return scale;
}
}