手指脱动图片 双击放大
package com.softpo.pointerstouchevent;
}
package com.softpo.pointerstouchevent.widget;
import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.widget.ImageView;
/**
* Created by softpo on 2017/4/26.
* Email: [email protected]
*/
public class CustomImage extends ImageView {
//记录上一次的位置
private float last_X = 0;
private float last_Y = 0;
public CustomImage(Context context, AttributeSet attrs) {
super(context, attrs);
}
//手指移动,更新图片的位置
public void move(MotionEvent event) {
// Log.d("flag", "----------------->move: " +current_X+", "+current_Y);
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
Log.d("flag", "----------------->move: down");
last_X = event.getX();
last_Y = event.getY();
break;
case MotionEvent.ACTION_MOVE:
Log.d("flag", "----------------->move: move");
//当前的坐标
float current_X = event.getX();//x轴坐标
float current_Y = event.getY();//Y轴坐标
float abs_x = Math.abs(current_X - last_X);
float abs_y = Math.abs(current_Y - last_Y);
if(abs_x>10&&abs_x<40||abs_y>10&&abs_y<40){
moveImage(current_X-last_X,current_Y-last_Y);
}
last_X = event.getX();
last_Y = event.getY();
break;
}
}
private void moveImage(float x, float y) {
int offsetX = (int) x;
int offsetY = (int) y;
this.setFrame(getLeft()+offsetX,getTop()+offsetY,getRight()+offsetX,getBottom()+offsetY);
}
private float scaleSize = 0.1f;//缩放比例
private double last_gap = 0;//两点之间的距离
public void scale(MotionEvent event) {
switch (event.getAction()){
case MotionEvent.ACTION_MOVE:
float x0 = event.getX(0);
float x1 = event.getX(1);
float y0 = event.getY(0);
float y1 = event.getY(1);
double current_gap = Math.sqrt((x0 - x1) * (x0 - x1) + (y0 - y1) * (y0 - y1));
if(current_gap-last_gap>10){//两点之间的距离变大
scaleImage(1);
}else if(current_gap - last_gap<-10){//两点之间距离变小
scaleImage(0);
}
last_gap = current_gap;
break;
}
}
public void scaleImage(int flag) {
int scaleSize_X = (int) (scaleSize * getWidth());
int scaleSize_Y = (int) (scaleSize*getHeight());
switch (flag){
case 0://缩小
if(getWidth()>50+scaleSize_X*2)//其小有形
this.setFrame(
getLeft()+ scaleSize_X,
getTop()+scaleSize_Y,
getRight()-scaleSize_X,
getBottom()-scaleSize_Y);
break;
case 1://放大
//其大有边
if(getWidth()
getTop()-scaleSize_Y,
getRight()+scaleSize_X,
getBottom()+scaleSize_Y);
}
break;
}
}
}