安卓实现图片旋转放大缩小

安卓实现图片旋转放大缩小

  • AndroidStdio环境
  • 使用Matrix类

Matrix类

Matrix类不能被继承,此类的所有公共静态成员都是线程安全的。Encapsulates a 3-by-3 affine matrix that represents a geometric transform.(封装表示几何变换的 3x3 仿射矩阵)

此类主要用来对图片的操作,有四个基本的类型。旋转:rotate;缩放:scale;平移:translate;错切:skew。具体使用可以参考API,这里我试用了旋转和缩放功能,其他类似。

代码块

    //操作图片用
    final Matrix matrix=new Matrix();

    //图片旋转
    xz.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            matrix.postRotate(45);//设置旋转度数
            Bitmap newbit=Bitmap.createBitmap(img,0,0,width,height,matrix,true);
            //转化为Drawable
            Drawable newimg=new BitmapDrawable(newbit);
            imgView.setBackgroundResource(0);
            imgView.setImageDrawable(newimg);
        }
    });

    //图片放大
    bigger.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
           if(img.getWidth()<=1.8*width&&img.getHeight()<=1.8*height){
                matrix.postScale(1.2f,1.2f);
                Bitmap newbit=Bitmap.createBitmap(img,0,0,width,height,matrix,true);
                //转化为Drawable
                Drawable newimg=new BitmapDrawable(newbit);
                imgView.setBackgroundResource(0);
                imgView.setImageDrawable(newimg);
           }
            else {
               imgView.setImageBitmap(img);
           }
        }
    });

    //图片缩小
    smaller.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
                matrix.postScale(0.8f,0.8f);
                Bitmap newbit=Bitmap.createBitmap(img,0,0,width,height,matrix,true);
                //转化为Drawable
                Drawable newimg=new BitmapDrawable(newbit);
                imgView.setBackgroundResource(0);
                imgView.setImageDrawable(newimg);
        }
    });

脚注

https://msdn.microsoft.com/zh-cn/library/system.drawing.drawing2d.matrix(v=vs.110).aspx

目录

  • 安卓实现图片旋转放大缩小
    • Matrix类
      • 代码块
      • 脚注
      • 目录
    • 问题与解决

问题与解决

图片旋转、放大时如不控制好ImageView和图片的大小关系就会造成图片控件过大,使得布局中其他控件不在屏幕中,造成显示错误。

解决:个人想法是控制ImageView为固定尺寸,让图片一直在imageView中居中显示,设置ImageView的scaleType属性为center即可。如有更好的方法欢迎指教^_^


你可能感兴趣的:(安卓学习笔记)