
package com.multitouch; |
import android.app.Activity; |
import android.os.Bundle; |
import android.util.Log; |
import android.view.MotionEvent; |
import android.view.View; |
import android.view.View.OnTouchListener; |
import android.widget.ImageView; |
import android.widget.RelativeLayout; |
import android.widget.RelativeLayout.LayoutParams; |
/** |
* 多点触控Demo实例: 图片的缩放。 |
* |
*/ |
public class MainActivity extends Activity { |
private RelativeLayout layout; |
protected String TAG = "zhongyao"; |
private ImageView imageView; |
private float currentDistance; |
private float lastDistance = -1; |
@Override |
protected void onCreate(Bundle savedInstanceState) { |
super.onCreate(savedInstanceState); |
setContentView(R.layout.activity_main); |
layout = (RelativeLayout) findViewById(R.id.layout); |
imageView = (ImageView) findViewById(R.id.imageView); |
layout.setOnTouchListener(new OnTouchListener() { |
@Override |
public boolean onTouch(View v, MotionEvent event) { |
switch (event.getAction()) { |
/** |
* 手指按下 |
*/ |
case MotionEvent.ACTION_DOWN: |
Log.d(TAG, "down!!!"); |
break; |
/** |
* 手指移动 |
*/ |
case MotionEvent.ACTION_MOVE: |
Log.d(TAG, "move!!!"); |
/** |
* 首先判断按下手指的个数是不是大于两个。 |
* 如果大于两个则执行以下操作(即图片的缩放操作)。 |
*/ |
if (event.getPointerCount() >= 2) { |
float offsetX = event.getX(0) - event.getX(1); |
float offsetY = event.getY(0) - event.getY(1); |
/** |
* 原点和滑动后点的距离差 |
*/ |
currentDistance = (float) Math.sqrt(offsetX * offsetX |
+ offsetY * offsetY); |
if (lastDistance < 0) { |
lastDistance = currentDistance; |
} else { |
/** |
* 如果当前滑动的距离(currentDistance)比最后一次记录的距离(lastDistance)相比大于5英寸(也可以为其他尺寸), |
* 那么现实图片放大 |
*/ |
if (currentDistance - lastDistance > 5) { |
Log.d(TAG, "放大!!!"); |
RelativeLayout.LayoutParams lp = (LayoutParams) imageView |
.getLayoutParams(); |
/** |
* 图片宽高一次放大为原来图片的1.1倍(当然,也可以为其他数值)。 |
*/ |
lp.width = (int) (imageView.getWidth() * 1.1); |
lp.height = (int) (imageView.getHeight() * 1.1); |
imageView.setLayoutParams(lp); |
lastDistance = currentDistance; |
/** |
* 如果最后的一次记录的距离(lastDistance)与当前的滑动距离(currentDistance)相比小于5英寸, |
* 那么图片缩小。 |
*/ |
} else if (lastDistance - currentDistance > 5) { |
Log.d(TAG, "缩小!!!"); |
RelativeLayout.LayoutParams lp = (LayoutParams) imageView |
.getLayoutParams(); |
/** |
* 图片宽高一次缩小为原来图片的0.9倍。 |
*/ |
lp.width = (int) (imageView.getWidth() * 0.9); |
lp.height = (int) (imageView.getHeight() * 0.9); |
imageView.setLayoutParams(lp); |
lastDistance = currentDistance; |
} |
} |
} |
break; |
/** |
* 手指抬起 |
*/ |
case MotionEvent.ACTION_UP: |
Log.d(TAG, "up!!!"); |
break; |
} |
return true; |
} |
}); |
} |
} |



