多点触控实现图片的放大和缩小
来源:互联网 发布:服务器网管软件 编辑:程序博客网 时间:2024/04/30 11:42
先上布局文件
<ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/imageView" android:src="@mipmap/d" android:scaleType="matrix"/>/>
scaleType的常用参数:
- CENTER /center 按图片的原来size居中显示,当图片长/宽超过View的长/宽,则截取图片的居中部分显示
- CENTER_CROP / centerCrop 按比例扩大图片的size居中显示,使得图片长(宽)等于或大于View的长(宽)
- CENTER_INSIDE / centerInside 将图片的内容完整居中显示,通过按比例缩小或原来的size使得图片长/宽等于或小于View的长/宽
- FIT_CENTER / fitCenter 把图片按比例扩大/缩小到View的宽度,居中显示
- FIT_END / fitEnd 把图片按比例扩大/缩小到View的宽度,显示在View的下部分位置
- FIT_START / fitStart 把图片按比例扩大/缩小到View的宽度,显示在View的上部分位置
- FIT_XY / fitXY 把图片不按比例扩大/缩小到View的大小显示
- MATRIX / matrix 用矩阵来绘制
---------------------------------------------------------------------------------------------
ublic class MainActivity extends AppCompatActivity implements View.OnTouchListener { private ImageView imageView; private Matrix matrix = new Matrix(); private Matrix savedMatrix=new Matrix(); private static final int NONE = 0; private static final int DRAG = 1; private static final int ZOOM = 2; private int mode = NONE; // 第一个按下的手指的点 private PointF startPoint = new PointF(); // 两个按下的手指的触摸点的中点 private PointF midPoint = new PointF(); // 初始的两个手指按下的触摸点的距离 private float oriDis=1f; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageView = (ImageView) findViewById(R.id.imageView); imageView.setOnTouchListener(this); } @Override public boolean onTouch(View v, MotionEvent event) { ImageView view= (ImageView) v; //可以处理多点触摸 // http://blog.csdn.net/fobdddf/article/details/19479153 // http://blog.sina.com.cn/s/blog_60e96a410100mjd2.html // https://my.oschina.net/qianjia/blog/109282 //ACTION_MASK 行动的面具 switch (event.getAction() & MotionEvent.ACTION_MASK){ case MotionEvent.ACTION_DOWN : //第一个手指按下事件 matrix.set(view.getImageMatrix()); savedMatrix.set(matrix); startPoint.set(event.getX(),event.getY()); //拖动 mode = DRAG; Toast.makeText(MainActivity.this, "第一个手指按下事件", Toast.LENGTH_SHORT).show(); break; case MotionEvent.ACTION_POINTER_DOWN : //第二个手指按下事件 oriDis = distance(event); if (oriDis > 10f){ savedMatrix.set(matrix); midPoint = middle(event); //标记成缩放状态 mode = ZOOM; Toast.makeText(MainActivity.this, "第二个手指按下事件", Toast.LENGTH_SHORT).show(); } break; case MotionEvent.ACTION_UP : case MotionEvent.ACTION_POINTER_UP : //手指放开事件 mode = NONE ; Toast.makeText(MainActivity.this, "手指放开事件", Toast.LENGTH_SHORT).show(); break; case MotionEvent.ACTION_MOVE : //手指滑动事件 if (mode == DRAG){ //是一个手指拖动 matrix.set(savedMatrix); //移动图片 matrix.postTranslate(event.getX() - startPoint.x,event.getY() - startPoint.y); }else if (mode == ZOOM){ //两个手指滑动 float newDist = distance(event); if (newDist > 10f){ matrix.set(savedMatrix); float scale = newDist / oriDis; //图片的缩放 matrix.postScale(scale,scale,midPoint.x,midPoint.y); } } break; } //设置imageView的matrix view.setImageMatrix(matrix); return true; } //计算两个触摸点之间的距离 private float distance(MotionEvent event){ //获取第0根手指和第一根手指的坐标 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 PointF middle(MotionEvent event){ float x = event.getX(0) + event.getX(1); float y = event.getY(0) + event.getY(1); return new PointF(x/2,y/2); }}
阅读全文
3 0
- 多点触控实现图片的放大和缩小
- 多点触控实现图片移动和放大缩小
- 多点触控实现图片移动和放大缩小
- 自定义圆形图片实现多点触控放大缩小和拖动
- 自定义圆形图片实现多点触控放大缩小和拖动
- 自定义圆形图片实现多点触控放大缩小和拖动
- TouchImageView 实现图片的缩放,双击放大缩小,多点触控的功能
- Android多点触控技术,实现对图片的放大缩小平移,惯性滑动等功能
- Android多点触控技术,实现对图片的放大缩小平移,惯性滑动等功能
- Iwfu-安卓Gesture手势(2)-实现多点触控控制图片的放大缩小。
- 多点触控 图片的放大缩小 和 拖拽移动
- 多点触控-------图片放大缩小与拖拽
- Android自定义ImageView实现图片缩放滑动,双击放大缩小,多点触控缩放
- javaScript实现图片的放大和缩小
- JS实现图片的放大和缩小
- android多点触控,图片的拖拽与放大缩小
- 使用view的OnTouchListener来实现图片的移动和多点触控放大图片
- unity 多点触控(放大,缩小)
- OpenSuSE services management
- OkHttp完全解析
- 好盈XERUN-V10有感无刷电机6根信号输出线
- 解决Android 中设置Clickable 有时无效的方法
- request获取项目名,资源等
- 多点触控实现图片的放大和缩小
- 分页实现 MySql
- k3 Cloud表单数据查询接口
- js将连接生成二维码,并转为图片
- 下拉异步加载
- [Leetcode] 187. Repeated DNA Sequences 解题报告
- java高手之路上的必备基础知识
- Caused by: org.apache.ibatis.type.TypeException: Could not resolve type alias 'BaseResultMap'
- 设置SOAPFaultException中SOAPFault的内容