首页 > 代码库 > Android 多点触摸(图片放大缩小)

Android 多点触摸(图片放大缩小)

就不说什么了,有注释 基本有基础的都看得懂

欢迎加入我的交流群: 386451316

main.xml文件

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/mo_i"
tools:context=".MainActivity" >

<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/im"
android:src="http://www.mamicode.com/@drawable/ic_launcher"/>

</FrameLayout>

 

java代码

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

tm_i = (FrameLayout) findViewById(R.id.mo_i);
im = (ImageView) findViewById(R.id.im);

// 触摸事件
tm_i.setOnTouchListener(new OnTouchListener() {
float current;// 第一次距离
float ladtcuss = -1; // 最后的距离

@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {// 获取事件
case MotionEvent.ACTION_DOWN:// 按下的操作

break;
case MotionEvent.ACTION_MOVE:// 移动
/**
* 获取多个触摸点 需要用真机调试
*/
if (event.getPointerCount() >= 2) {
float offsetX = event.getX(0) - event.getX(1);
float offsetY = event.getY(0) - event.getY(0);

// 使用勾股定理 获取两点距离
current = (float) Math.sqrt(offsetX * offsetX + offsetY
* offsetY);
if(ladtcuss<0){
ladtcuss = current;
}else{
if(current-ladtcuss>5){
System.out.println("1");
FrameLayout.LayoutParams lp = (LayoutParams)im.getLayoutParams();
lp.width=(int) (1.1f * im.getWidth());
lp.height=(int) (1.1f * im.getHeight());
im.setLayoutParams(lp);
ladtcuss = current;
}else if(ladtcuss-current>5){
System.out.println("0");
FrameLayout.LayoutParams lp = (LayoutParams)im.getLayoutParams();
lp.width=(int) (0.9f * im.getWidth());
lp.height=(int) (0.9f * im.getHeight());
im.setLayoutParams(lp);
ladtcuss = current;
}
}
}
// 获取触摸点的个数
System.out.println("motoll---->" + event.getPointerCount());
System.out.println(String.format("x1:%f y1:%f x2:%f y2%f",
event.getX(0), event.getY(0), event.getX(1),
event.getY(1)));
/**
* 以下是获取一个触摸点
*/
// 图片位于 FrameLayout 中
// FrameLayout.LayoutParams lp = (LayoutParams)
// im.getLayoutParams();
// lp.leftMargin = (int) event.getX();
// lp.topMargin = (int) event.getY();
// im.setLayoutParams(lp);
// //输出触摸点
// System.out.println(String.format("x:%f, y:%f",event.getX(),event.getY()));
break;
case MotionEvent.ACTION_UP:// 弹起

break;

}
// false表示事件没有后续事件触发
return true;
}
});
}

private FrameLayout tm_i;
private ImageView im;

}

Android 多点触摸(图片放大缩小)