学习android第一篇:图片的放大缩小

来源:互联网 发布:如何利用网络挣钱 编辑:程序博客网 时间:2024/05/20 06:26
package okay.incorruptrelics.bll;import android.graphics.Matrix;import android.graphics.PointF;import android.util.FloatMath;import android.util.Log;import android.view.MotionEvent;import android.view.View;import android.view.View.OnTouchListener;import android.widget.ImageView;public class ImageMatrix implements OnTouchListener {private static final String TAG = "Touch";public static ImageView view;Matrix matrix = new Matrix();Matrix savedMatrix = new Matrix();PointF start = new PointF();PointF first = new PointF();PointF mid = new PointF();float oldDist;// 设备高 宽int dwidth, dheight;// 图片高宽int widOrg, heightOrg;// We can be in one of these 3 statesstatic final int NONE = 0;static final int DRAG = 1;static final int ZOOM = 2;int mode = NONE;@Overridepublic boolean onTouch(View v, MotionEvent event) {// TODO Auto-generated method stubview = (ImageView) v;widOrg = view.getWidth();heightOrg = view.getHeight();switch (event.getAction() & MotionEvent.ACTION_MASK) {// 设置拖拉模式case MotionEvent.ACTION_DOWN:savedMatrix.set(matrix);start.set(event.getX(), event.getY());first.set(event.getX(), event.getY());// Log.d(TAG, "mode=DRAG");mode = DRAG;break;case MotionEvent.ACTION_UP:float x = event.getX(0) - first.x;float y = event.getY(0) - first.y;break;case MotionEvent.ACTION_POINTER_UP:mode = NONE;// Log.d(TAG, "mode=NONE");break;// 设置多点触摸模式case MotionEvent.ACTION_POINTER_DOWN:oldDist = spacing(event);Log.d(TAG, "oldDist=" + oldDist);if (oldDist > 10f) {savedMatrix.set(matrix);midPoint(mid, event);mode = ZOOM;// Log.d(TAG, "mode=ZOOM");}break;// 若为DRAG模式,则点击移动图片case MotionEvent.ACTION_MOVE:if (mode == DRAG) {matrix.set(savedMatrix);// 设置位移matrix.postTranslate(event.getX() - start.x, event.getY()- start.y);// start.set(event.getX(), event.getY());}// 若为ZOOM模式,则多点触摸缩放else if (mode == ZOOM) {float newDist = spacing(event);// Log.d(TAG, "newDist=" + newDist);if (newDist > 10f) {matrix.set(savedMatrix);float scale = newDist / oldDist;// 设置缩放比例和图片中点位置matrix.postScale(scale, scale, mid.x, mid.y);}// oldDist=newDist;}break;}view.setImageMatrix(matrix);return true;}/** * 计算拖动的距离 *  * @param event * @return */private float spacing(MotionEvent event) {float x = event.getX(0) - event.getX(1);float y = event.getY(0) - event.getY(1);return FloatMath.sqrt(x * x + y * y);}/** * 计算两点的之间的中间点 *  * @param point * @param event */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);}}

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小孩钢琴坐姿不对向后仰怎么办 小孩皮肤不好容易留疤怎么办 学游泳时站不稳怎么办 水呛到了不停打嗝怎么办 来月经前游泳了怎么办 快来完事游泳了怎么办 游泳时来月经了怎么办 经期第7天游泳了怎么办 来月经已经游了泳怎么办 月经来了要游泳怎么办 三个月宝宝趴着不会抬头怎么办 我的月经不完怎么办 游泳时怎么办能浮出水面 游泳时眼镜起雾怎么办 练瑜伽手臂变粗怎么办 孕妇喝了芬达怎么办 宫口开了但头高怎么办 整天坐着肚子越来越大怎么办 坐久了屁股变大怎么办 屁股久坐的黑印怎么办 练瑜伽小腿变粗怎么办 练瑜伽腿粗了怎么办 练完瑜伽腿粗怎么办 肚子大屁股大腿粗怎么办 甲状腺偏大弥漫性欠均匀怎么办 大腿后侧拉伤了怎么办 腰和臀部都疼怎么办 瑜伽后弯后腰疼怎么办? 吃了大蒜肝痛怎么办 练瑜伽前躯不行怎么办 月子里碰冷水了怎么办 月子手碰凉水了怎么办 月子里碰了冷水怎么办 顺产后下面会痛怎么办 产后肚子瘦不下来怎么办 出月子后臀部很疼怎么办 做月子时臀部疼怎么办 月子臀部大腿疼困怎么办 产后抱孩子腰疼怎么办 剖腹产后5年小肚子很大怎么办 压力大工作忙瘦了怎么办?