第17天 Android Touch事件學習 4 獲取手指觸摸位置

觸摸事件學習系列文章詳見:

《Android Touch事件學習系列匯總》

還是回到onTouchEvent方法傳遞的參數MotionEvent類,其對象有四個方法可以獲取當前手指在屏幕上的位置信息,但是一個是相對地址一個是絕對地址,以下具體看下區別。

一、Android Touch事件rawX,rawY與x,y的區別

MotionEvent有四個方法getRawX(), event.getRawY(), getX(),getY(), 為什麼同樣是x,y軸幹嘛非得用兩個變量呢?

先來看下效果圖:

vcfOqjAsMLXEz+C21M671sOjrHggPSA5NiDLtcP3yse0pcP+tePA67vSyavH+NPy1+7X87LgtcS+4MDrysc5Njxicj4KPGJyPgo8YnI+CnJhd1ggo6wgcmF3WSDP4LbU09rGwcS7tcTX+LHqPGJyPgp4o6x5IM/gttTT2rWxx7C/2Lz+tcTX+LHqPGJyPgpyYXdYLCBYIM/y09LSxravtrzKx9T2tPOjrM/y1/PSxravtrzKx7z10KE8YnI+CnJhd1ksIFkgz/LPwtLGtq+2vMrH1Pa086Osz/LJz9LGtq+2vMrHvPXQoTwvcD4KPHA+PGJyPgo8L3A+CjxwPjwvcD4KPGgxPrb+oaLQp7n7zby21NOmtPrC6zwvaDE+CjEuICDW0LzktcS70smrx/jT8srH0ru49tfUtqjS5VRleHRWaWV3o6zTw9PavODM/VRvdWNoysK8/qOswO/D5tPQ0ru49kxvZ0xpc3RlbmVyvdO/2qOs08PT2tTaQWN0dml0edbQyrXKsVRvdWNozrvWw8rks/bQxc+iPGJyPgo8cD48L3A+CjxwPjxicj4KPGJyPgo8L3A+CjxwcmUgY2xhc3M9″brush:java;”>public class CustomTextView extends TextView {

private LogListener mLogListener;

public CustomTextView(Context context) {
super(context);
}

public CustomTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}

public CustomTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}

public void setLogListener(LogListener pListener) {
mLogListener = pListener;
}

@Override
public boolean onTouchEvent(MotionEvent event) {

int action = event.getAction();

switch (action) {
case MotionEvent.ACTION_MOVE:
float rawX = event.getRawX();
float rawY = event.getRawY();
float x = event.getX();
float y = event.getY();

if (mLogListener != null) {
mLogListener.output(“rawX = ” + rawX
+ “\n rawY = ” + rawY
+ “\n x = ” + x
+ “\n Y = ” + y);
}

break;
}

return true;
}

/**
* 用於在Actvity中實時Touch位置輸出信息
*/
public interface LogListener {

public void output(String pOutput);
}

}

2. 在AndroidManifast.xml中配置佈局



    
        
    
    

3. Activity中加載視圖,控制顯示touch位置信息

public class TouchDemoActivity extends Activity {

	private TextView mOutput;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		setContentView(R.layout.main);

		mOutput = (TextView) findViewById(R.id.output);
		mOutput.setText("rawX = 0 \n rawY = 0 \n x = 0 \n Y = 0");
		
		CustomTextView customTextView = (CustomTextView) findViewById(R.id.custom_textview);
		customTextView.setLogListener(new CustomLogListener());
		
	}
	
	
	/**
	 * 用於獲取TouchEvent中位置信息
	 */
	private class CustomLogListener implements LogListener {

		@Override
		public void output(String pOutput) {
			mOutput.setText( pOutput );
		}
		
	}
	
	
	
}

源碼下載

例子下載

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *