Android图片的手动放大缩小
【摘要】 本文介绍了通过缩放因子实现图片放大缩小的功能,效果如动图所示。使用 `Matrix` 对图片进行缩放处理。为避免内存崩溃,可在全局配置添加 `android:largeHeap="true"`。代码中定义了 `beforeScale` 和 `nowScale` 变量控制缩放范围,确保流畅体验。
利用缩放因子进行图片的放大缩小,效果图如下
在实现过程中如出现直接崩溃的情况:在全局配置文件中加入**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;
}
});
}
}
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)