android 拖動控件例子

在百度新聞和網易新聞app裏看到了自定義欄目的效果,它們都採用了拖動控件的方式來定製屬於自己的欄目。想了會,沒思路,google了一把


在android中,拖放控件的原理大致如下:重寫某控件(比如TextView)的onTouchEvent方法,監聽其MotionEvent的事件(一般就是按下、移動、釋放等),在其中記錄移動該控件的實時座標並設置爲當前座標即可。


更具有借鑑性的實際例子:

1、Google Code有個開源的項目android-drag-and-drop-listview,裏面有個不錯的例子。

2、博客園謙虛的天下寫了一篇很讚的博文,該博文借鑑了apidemo裏面的music例子,加上了對listview分組後的拖拉考慮,還加上了拖影效果,註釋詳盡,在此感謝。


下面是一個拖動TextView的簡單例子的關鍵代碼,完整工程見這裏

@Override
	public boolean onTouchEvent(MotionEvent event) {
		final int iAction = event.getAction();
		final int iCurrentx = (int)event.getX();
		final int iCurrenty = (int)event.getY();
		switch(iAction)
		{
		case MotionEvent.ACTION_DOWN:
			mPreviousx = iCurrentx;
			mPreviousy = iCurrenty;
			break;
		case MotionEvent.ACTION_MOVE:
			int iDeltx = iCurrentx - mPreviousx;
			int iDelty = iCurrenty - mPreviousy;
			final int iLeft = getLeft();
			final int iTop = getTop();
			if(iDeltx != 0 || iDelty != 0)
				layout(iLeft + iDeltx,
						iTop + iDelty,
						iLeft + iDeltx + getWidth(),
						iTop + iDelty + getHeight());

			mPreviousx = iCurrentx - iDeltx;
			mPreviousy = iCurrenty - iDelty;
			break;
		case MotionEvent.ACTION_UP:
			break;
		case MotionEvent.ACTION_CANCEL:
			break;
		}
		return true;
	}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章