魔乐科技安卓开发教程----李兴华----14多点触控

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

结果是得到一张可以用手指缩放的照片

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值