安卓手机点击图片全屏观看,再点击回到原位。没有手势放大查看效果

图片说明

求大神帮忙啊

你点击默认图片跳转到一个界面或者切换到fragment或者其他的dialog(看喜欢而定),activity中写缩放,拖拉的功能代码,对应的imageview写点击事件,finish().
拖拉和缩放的功能代码:

     private ImageView toucher_iv;

            toucher_iv.setOnTouchListener(this);//添加触摸监听器

           //记录当前图片的Matrix
    private Matrix  beforeMatrix=new Matrix();
    //改变状态后的Matrix
    private  Matrix  changeMatrix=new Matrix();
    //记录当前图片处于的状态
    private  int currentState=0;//当前状态
    private final static int MOVE=1;//拖动
    private  final static int SCALLE=2;//缩放
    //记录两个坐标(float类型)
     private  PointF  before_PointF=new PointF();
    //记录下一开两个手指间的距离:
    private  float before_Distance;
    //记录下开始时,两个手指间的中心点
    private  PointF midPointf;


    /**
     * 1.拖动分析:
     * 在原本Matrix基础上添加移动的x,y距离,实现拖动
     * 做法:先记录开始的Matrix1,
     *       然后计算移动的x,y,
     *       创建一个以Matrix1为基础的新的Matrix2,添加移动的x,y
     *       图片设置新的Matrix2
     *
     *
     * 2.缩放分析:
     * 先记录中心点(缩放,旋转都需要用到),原本的Matrix,原本手指间距离,通过距离比率来设置
     *
     * @param v
     * @param event
     * @return
     */
    @Override
    public boolean onTouch(View v, MotionEvent event) {
             switch (event.getAction() & MotionEvent.ACTION_MASK){
                 //手指压下屏幕
                 case MotionEvent.ACTION_DOWN:
                     currentState=MOVE;
                     beforeMatrix.set(toucher_iv.getImageMatrix());
                     before_PointF.set(event.getX(),event.getY());
                     break;
                 //手指在滑动
                 case MotionEvent.ACTION_MOVE:
                        if(currentState==MOVE){//拖动状态
                            float distance_x=event.getX()-before_PointF.x;
                            float ditance_y=event.getY()-before_PointF.y;
                            changeMatrix.set(beforeMatrix);
                            changeMatrix.postTranslate(distance_x,ditance_y);
                        }else if (currentState==SCALLE){//缩放状态
                                 float endDistance=distance(event);
                                 if(endDistance>10f){
                                     float scale=endDistance/before_Distance;
                                     changeMatrix.set(beforeMatrix);
                                     changeMatrix.postScale(scale,scale,midPointf.x,midPointf.y);
                                 }
                        }
                     break;
                 //手指离开触摸
                 case MotionEvent.ACTION_UP:
                     currentState=0;
                     break;
                 //多一个手指在触摸
                 case MotionEvent.ACTION_POINTER_DOWN:
                     currentState=SCALLE;
                     //开始时,两个手指间距离
                     before_Distance=distance(event);
                     if(before_Distance>10f){
                         midPointf=mid(event);
                         beforeMatrix.set(toucher_iv.getImageMatrix());
                     }
                     break;
                 //还有手指在触摸
                 case MotionEvent.ACTION_POINTER_UP:
                     currentState=0;
                     break;
             }
          toucher_iv.setImageMatrix(changeMatrix);
        return true;
    }
    /** 计算两个手指间的距离 */
    private float distance(MotionEvent event) {
        float dx = event.getX(1) - event.getX(0);
        float dy = event.getY(1) - event.getY(0);
        /** 使用勾股定理返回两点之间的距离 */
        return (float) Math.sqrt(dx * dx + dy * dy);
    }

    /** 计算两个手指间的中间点 */
    private PointF mid(MotionEvent event) {
        float midX = (event.getX(1) + event.getX(0)) / 2;
        float midY = (event.getY(1) + event.getY(0)) / 2;
        return new PointF(midX, midY);
    }



//设置图片一开始居中的代码:

 if(bitmap==null){
                return;
            }
            float y=  ((height-bitmap.getHeight())/2);
            LogController.i(TAG,"move_y"+y);
            if(y>0){
                beforeMatrix.setTranslate(0,y);
                toucher_iv.setImageMatrix(beforeMatrix);
            }
            toucher_iv.setImageBitmap(bitmap);