多点触控

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;
    }

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值