Android图片放大缩小自由移动控件
2017-11-02 15:10
435 查看
public class ScaleImageView extends ImageView { private Matrix matrix=new Matrix(); private Matrix savedMatrix=new Matrix(); static final int NONE = 0; static final int DRAG = 1; static final int ZOOM = 2; int mode = NONE; // Remember some things for zooming PointF start = new PointF(); PointF mid = new PointF(); float oldDist = 1f; public ScaleImageView(Context context) { super(context); } public ScaleImageView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public ScaleImageView(Context context, AttributeSet attrs) { super(context, attrs); } private float spacing(MotionEvent event) { float x = event.getX(0) - event.getX(1); float y = event.getY(0) - event.getY(1); return (float) Math.sqrt(x * x + y * y); } private void midPoint(PointF point, MotionEvent event) { float x = event.getX(0) + event.getX(1); float y = event.getY(0) + event.getY(1); point.set(x / 2, y / 2); } @Override public boolean onTouchEvent(MotionEvent event) { if(event.getActionMasked()==MotionEvent.ACTION_POINTER_UP) Log.d("Infor", "多点操作"); switch(event.getActionMasked()){ case MotionEvent.ACTION_DOWN: matrix.set(getImageMatrix()); savedMatrix.set(matrix); start.set(event.getX(),event.getY()); Log.d("Infor", "触摸了..."); mode=DRAG; break; case MotionEvent.ACTION_POINTER_DOWN: //多点触控 oldDist=this.spacing(event); if(oldDist>10f){ Log.d("Infor", "oldDist"+oldDist); savedMatrix.set(matrix); midPoint(mid,event); mode=ZOOM; } break; case MotionEvent.ACTION_POINTER_UP: mode=NONE; break; case MotionEvent.ACTION_MOVE: if(mode==DRAG){ //此实现图片的拖动功能... matrix.set(savedMatrix); matrix.postTranslate(event.getX()-start.x, event.getY()-start.y); } else if(mode==ZOOM){// 此实现图片的缩放功能... float newDist=spacing(event); if(newDist>10){ matrix.set(savedMatrix); float scale=newDist/oldDist; matrix.postScale(scale, scale, mid.x, mid.y); } } break; } setImageMatrix(matrix); return true; } }
直接在布局文件中当成自定义控件:
<zhong.imageviewdemo.ScaleImageViewandroid:id="@+id/imageview_activity"android:layout_width="300dp"android:layout_height="300dp"android:src="@drawable/sales_perform_new"android:scaleType="matrix"android:layout_centerVertical="true"android:layout_centerHorizontal="true" />其中有一行很关键的是
android:scaleType="matrix"
这一行一定是设置成这样才有效果;
相关文章推荐
- Android-图片预览(自定义ImageView 封装(jar): 图片放大缩小,自由移动,双击放大,多点触控)
- android自定义view实现可自由放大缩小和移动的imageView
- 【实训】可以移动放大缩小的图片控件
- (原创)android中使用Baidu Map遇到的问题之:移动Mapview上的放大缩小控件
- Android 实现可以自由移动缩放的图片控件
- Android 图片拖拽、放大缩小的自定义控件
- Android 图片拖拽、放大缩小的自定义控件
- android 图片的 放大 缩小 移动
- Bitmap位图渲染与操作(图片移动,放大,缩小,旋转,镜像发转)--android游戏开发
- 打造个性的图片预览与多点触控(自由移动,自由缩放,双击放大缩小)
- android中使用Baidu Map遇到的问题之:移动Mapview上的放大缩小控件
- Android zip文件中读取图片实现Gallery放大缩小,移动,图片弹回等特效。
- android 多个ImageView图片缩小、放大、移动,图片不能移出ImageView视图,清空图片内存
- ClipView拍照截图(支持图片放大缩小移动)
- IOS代码添加控件,控件移动,放大,缩小,旋转
- android 自定义ImageView实现图片手势滑动,多点触摸放大缩小效果
- IOS代码添加控件,控件移动,放大,缩小,旋转
- Android PhtoView 图片放大缩小后,图片显示在界面上左上角的解决办法
- Android之PhtoView设置图片放大缩小后,图片显示在界面上左上角的解决办法
- Android实现手势滑动多点触摸放大缩小图片效果