利用缩放因子进行图片的放大缩小,效果图以下
在实现过程当中如出现直接崩溃的状况:在全局配置文件中加入android:largeHeap="true"便可解决问题,在文章最后有现成代码
步骤:
1.布局文件 android:scaleType="matrix"记得加上,否则没有效果
2.控件实例化及处理机制的取代
3.进行逻辑处理,并利用Matrix进行图片处理其中nowScale 及beforeScale为自定义的float类型的全局变量!,具体见最后代码**
代码以下:
布局文件android
<ImageView android:id="@+id/imgzoom" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:scaleType="matrix" android:src="@drawable/myphoto" />
Java文件web
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; } }); } }
本文同步分享在 博客“计蒙不吃鱼”(CSDN)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。ide