图片缩放
来源:互联网 发布:深圳市国税开票软件 编辑:程序博客网 时间:2024/06/09 22:15
package bawei.com.myapplication;
import android.graphics.Matrix;
import android.graphics.PointF;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
public class MainActivity extends AppCompatActivity {
private ImageView picture;
private float xl;
private float yl;
private final int MODE_DRAG = 1;
private final int MODE_ZOOM = 2;
private final int MODE_NONE = 0;
private int currentMode = MODE_NONE;
private double distanceStart;
@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView();}Matrix matrix = new Matrix();Matrix matrixNew = new Matrix();private void initView() { picture = (ImageView) findViewById(R.id.picture); picture.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction() & MotionEvent.ACTION_MASK) { case MotionEvent.ACTION_DOWN: currentMode = MODE_DRAG; xl = event.getX(); yl = event.getY(); matrix.set(picture.getImageMatrix()); break; case MotionEvent.ACTION_POINTER_DOWN: //计算两个手指间的距离 distanceStart = spacing(event); if (distanceStart > 20) { currentMode = MODE_ZOOM; matrix.set(picture.getImageMatrix()); } break; case MotionEvent.ACTION_MOVE: if (currentMode == MODE_DRAG) { matrixNew.set(matrix); float xn = event.getX(); float yn = event.getY(); //matrix.setTranslate(xn,yn); matrixNew.postTranslate(xn - xl, yn - yl); } else if (currentMode == MODE_ZOOM) { if (spacing(event) > 20) { matrixNew.set(matrix); double distance = spacing(event); float scale = (float) (distance / distanceStart); PointF pointF = myPointF(event); matrixNew.postScale(scale, scale, pointF.x, pointF.y); } } break; case MotionEvent.ACTION_UP: currentMode = MODE_NONE; break; } picture.setImageMatrix(matrixNew); return true; } });}//计算两点之间的距离private double spacing(MotionEvent event) { float x = 0; float y = 0; try { x = event.getX(0) - event.getX(1); y = event.getY(0) - event.getY(1); } catch (IllegalArgumentException e) {} return Math.sqrt(x * x + y * y);}public PointF myPointF(MotionEvent event){ float x1 = event.getX(0); float x2 = event.getX(1); float y1 = event.getY(0); float y2 = event.getY(1); float x = (x1+x2)/2; float y = (y1+y2)/2; PointF pointF = new PointF(x, y); return pointF;}
}
=======================================
xml布局
阅读全文
0 0
- 图片缩放
- 图片缩放
- 图片缩放
- 图片缩放
- 图片缩放
- 缩放图片
- 缩放图片
- 图片缩放
- 图片缩放
- 图片缩放
- 缩放图片
- 缩放图片
- 图片缩放
- 图片缩放
- 图片缩放
- 缩放图片
- 图片缩放
- 图片缩放
- 机房重构—注册
- golang日記
- linux 读写锁的几种实现方式
- Revit二次开发之创建共享参数及绑定共享参数【比目鱼原创】
- POJ-3735 Training little cats
- 图片缩放
- 编程之美 2.4 “1”的数目及扩展问题
- 机器学习算法~推荐系统
- 16 Quantized Convolutional Neural Networks for Mobile Devices论文翻译笔记
- Core Animation 基础
- 守护进程和守护线程
- CentOS 安装 Maven
- Edittext输入手机号进行格式化
- 20dB/10倍频程 、特征频率fT