求大神帮忙啊
你点击默认图片跳转到一个界面或者切换到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);