利用缩放因子进行图片的放大缩小,效果图如下
![图片[1]-Android图片的手动放大缩小-一一网](https://www.proyy.com/skycj/data/images/2021-06-30/1ec96381f391ea9c04e8645c51d32173.jpg)
在实现过程中如出现直接崩溃的情况:在全局配置文件中加入 __android:largeHeap=”true” **即可解决问题,在文章最后有现成代码
步骤:
1. 布局文件 android:scaleType=”matrix” 记得加上,不然没有效果

2. 控件实例化及处理机制的取代
![图片[2]-Android图片的手动放大缩小-一一网](https://www.proyy.com/skycj/data/images/2021-06-30/d97333b67e844cdf872c552dd382f4c8.jpg)

3. 进行逻辑处理,并利用 Matrix 进行图片处理**其中 nowScale 及 beforeScale 为自定义的 float 类型的全局变量!,具体见最后代码 **

代码如下:
布局文件
    <ImageView
        android:id="@+id/imgzoom"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:scaleType="matrix"
        android:src="https://juejin.cn/post/@drawable/myphoto" />
复制代码Java 文件
public class MainActivity extends Activity {
    private ImageView mImgzoom;
    private float beforeScale=1.0f;//之前的伸缩值
    private float nowScale;//当前的伸缩值
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        myScale();
    }
    private void initView() {
        mImgzoom = (ImageView) findViewById(R.id.imgzoom);
    }
    private void myScale(){
        final ScaleGestureDetector scaleGestureDetector=new ScaleGestureDetector(this, new ScaleGestureDetector.OnScaleGestureListener() {
            @Override
            public boolean onScale(ScaleGestureDetector detector) {
                nowScale=detector.getScaleFactor()*beforeScale;
                //设置缩放的范围
                if (nowScale>3||nowScale<0.1){
                    beforeScale=nowScale;
                    return true;
                }
                Log.i("Scale","nowScale="+nowScale);
                Matrix matrix=new Matrix();
                matrix.setScale(nowScale,nowScale);
                Bitmap bitmap=BitmapFactory.decodeResource(getResources(),R.drawable.myphoto);//获取图片
                bitmap=Bitmap.createBitmap(bitmap,0,0,bitmap.getWidth(),bitmap.getHeight(),matrix,true);//转化成bitmap格式
                mImgzoom.setImageBitmap(bitmap);
                beforeScale=nowScale;//保存上一次的缩放值!
                return false;
            }
            @Override
            public boolean onScaleBegin(ScaleGestureDetector detector) {
                return true;//记得改成ture;
            }
            @Override
            public void onScaleEnd(ScaleGestureDetector detector) {
            }
        });
        mImgzoom.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                scaleGestureDetector.onTouchEvent(event);
                return true;
            }
        });
    }
}
复制代码© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
    



















![[02/27][官改] Simplicity@MIX2 ROM更新-一一网](https://www.proyy.com/wp-content/uploads/2020/02/3168457341.jpg)



![[桜井宁宁]COS和泉纱雾超可爱写真福利集-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/4d3cf227a85d7e79f5d6b4efb6bde3e8.jpg)

![[桜井宁宁] 爆乳奶牛少女cos写真-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/d40483e126fcf567894e89c65eaca655.jpg)
