1.touch事件捕捉:实现onTouchListener接口,执行里面的onTouch(View view,MotionEvent event)方法;
2.onTouch 的返回值true和false的区别:
源码说明:True if the listener has consumed the event, false otherwise。
- 返回true:表示此onTouch处理了该事件,该事件继续执行。
- 返回FALSE:表示此onTouch事件没有处理该事件,要向上传递。导致出现只能识别actiondown动作。
3.代码中设置一个控件的布局位置:
- 获取这个控件的父布局的layoutParams,设置这个params对象的位置属性,然后最后再将这个控件的layoutparams设置为修改之后的layoutparams
4.多点触控的捕捉并实现图片放大缩小
event.getpointerConut 可以捕捉到目前的触摸点数。getX(position)gety(position) 可以获取对应点的x,y坐标。
利用勾股定理,可以判断两点的距离是变大还是缩小。两个关键的参数设定lastDistance 和 currentDistance
同样获取到img所在的布局父布局,然后对其width和height进行设置。
package com.gu.multtouch;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import com.gu.multtouch.MyCallBack.MyListener;
@SuppressLint("ClickableViewAccessibility")
public class MainActivity extends Activity implements OnTouchListener{
private ImageView img;
private MyCallBack back;
private int lastDistance = -1;
private int currentDistance = 0;
private LinearLayout.LayoutParams lp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LinearLayout ll = (LinearLayout) findViewById(R.id.content);
img = (ImageView) findViewById(R.id.img);
lp = (LayoutParams) img.getLayoutParams();
ll.setOnTouchListener(this);
}
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
break;
case MotionEvent.ACTION_UP:
break;
case MotionEvent.ACTION_MOVE:
if (event.getPointerCount() >= 2) {
float x = event.getX(0) - event.getX(1);
float y = event.getY(0) - event.getY(1);
currentDistance = (int) Math.sqrt(x * x + y * y);
if (lastDistance == -1) {
lastDistance = currentDistance;
}
// 5----提高代码的容错能力
if (lastDistance - currentDistance > 5) {
// 缩小
lp.width = (int) (0.9 * img.getWidth());
lp.height = (int) (0.9 * img.getHeight());
img.setLayoutParams(lp);
lastDistance = currentDistance;
} else if (currentDistance - lastDistance > 5) {
// 放大
lp.width = (int) (1.1 * img.getWidth());
lp.height = (int) (1.1 * img.getHeight());
img.setLayoutParams(lp);
lastDistance = currentDistance;
}
}
break;
default:
break;
}
return true;
}
}