安卓实现图片旋转放大缩小
- 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
目录
问题与解决
图片旋转、放大时如不控制好ImageView和图片的大小关系就会造成图片控件过大,使得布局中其他控件不在屏幕中,造成显示错误。
解决:个人想法是控制ImageView为固定尺寸,让图片一直在imageView中居中显示,设置ImageView的scaleType属性为center即可。如有更好的方法欢迎指教^_^