Android图片的手动放大缩小
利用缩放因子进行图片的放大缩小,效果图如下
在实现过程中如出现直接崩溃的情况:在全局配置文件中加入android:largeHeap="true"即可解决问题,在文章最后有现成代码
步骤:
1.布局文件 android:scaleType="matrix"记得加上,不然没有效果
2.控件实例化及处理机制的取代
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="@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;
}
});
}
}