在android中無論是遊戲還是應用上來說,現在多點觸摸已經越來越普遍了,晚上就試着寫了一下,下面來和大家分享一下。值得注意的是,在進行測試的時候需要用真機測試,因爲模擬器不支持多點觸摸。
源碼下載地址:http://download.csdn.net/detail/liuyu973971883/9606172
效果圖:
——————————————————————————————————————————————
首先我們先創建一個工程
涉及的新方法:
1、setOnTouchListener()爲佈局設置觸摸監聽;
2、RelativeLayout.LayoutParams類型,通過子View進行getLayoutParams()獲取到,設置好參數後通過子View的setLayoutParams(RelativeLayout.LayoutParams類型)進行提交,這個方法主要是子View向父View提交自己的意願;
3、getPointerCount()獲取到當前有多少觸摸點;
主佈局文件的根爲RelativeLayout佈局,在裏面添加一個ImageView即可,爲根和ImageView都添加上ID,以便查找到。
——————————————————————————————————————————————
代碼如下:
activity_main.xml:
<span style="font-size:18px;"><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/relativeLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<ImageView
android:id="@+id/iv"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:src="@drawable/ic_launcher"/>
</RelativeLayout></span>
MainActivity.java:
package com.oak.learnmultouch;
import android.os.Bundle;
import android.app.Activity;
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;
public class MainActivity extends Activity {
private RelativeLayout root;//獲取到根佈局
private ImageView iv;//獲取到放大縮小的圖片
private int currentDistance;//當前距離
private int lastDistance = -1;//上一次距離
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//獲取到RelativeLayout根佈局
root = (RelativeLayout) findViewById(R.id.relativeLayout);
//獲取到圖片
iv = (ImageView) findViewById(R.id.iv);
//爲根佈局設置觸摸監聽
root.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent event) {
switch (event.getAction()) {
//當手指按下的時候
case MotionEvent.ACTION_DOWN:
System.out.println("action_down");
break;
//當手指移動的時候
case MotionEvent.ACTION_MOVE:
//記錄兩點之間x和y之間的距離,然後通過勾股定理得出兩點距離
float xLength,yLength;
//判斷如果觸摸點大於等於2則表示需要放大縮小圖片
if (event.getPointerCount() >= 2) {
//獲取到兩點x座標之間的值
xLength = event.getX(0) - event.getX(1);
//獲取到兩點y座標之間的值
yLength = event.getY(0) - event.getY(1);
//通過勾股定理得出兩點之間的值
currentDistance = (int) Math.sqrt(xLength * xLength
+ yLength * yLength);
//因爲我們上一次距離變量初始化爲-1,如果<0,則表示第一次進行放大縮小
if (lastDistance < 0) {
//記錄這個兩點之間的距離
lastDistance = currentDistance;
} else {
//如果當前距離比上一次距離大5個像素就進行放大操作
if (currentDistance - lastDistance > 5) {
// 放大
//獲取到子View向父View提交意願的類
RelativeLayout.LayoutParams lp = (LayoutParams) iv
.getLayoutParams();
//設置其寬度,每次*1.1放大
lp.width = (int) (iv.getWidth() * 1.1);
//設置其高度,每次*1.1放大
lp.height = (int) (iv.getHeight() * 1.1);
//子View提交意願
iv.setLayoutParams(lp);
//放大後將當前距離複製爲上一次距離
lastDistance = currentDistance;
//如果當前距離比上一次距離小5個像素就進行縮小操作
} else if (lastDistance - currentDistance > 5) {
// 縮小
//這裏因爲是縮小,圖片寬度最小縮小到20像素,以免縮爲1像素後不可進行放大
if (iv.getWidth() > 20) {
//獲取到子View向父View提交意願的類
RelativeLayout.LayoutParams lp = (LayoutParams) iv
.getLayoutParams();
//設置其寬度,每次*0.9縮小
lp.width = (int) (iv.getWidth() * 0.9);
//設置其高度,每次*0.9縮小
lp.height = (int) (iv.getHeight() * 0.9);
//子View提交意願
iv.setLayoutParams(lp);
//縮小後將當期距離複製爲上一次距離
lastDistance = currentDistance;
}
}
}
}
break;
case MotionEvent.ACTION_UP:
//手指擡起觸發
System.out.println("action_up");
break;
}
return true;
}
});
}
}
多觸點之圖片放大縮小到這裏教程就結束了,有不懂的可以留言哦,我會第一時間回覆你的。
By:Brycen Liu