android:View隨手指的移動而移動

來源:互聯網
上載者:User

android:View隨手指的移動而移動
我們經常要做一些效果,比如,點擊之後的動畫,隨著手指的移動而移動。那麼它們如何?的呢?我們直到,view的自動移動,我們可以設定動畫,比如之前寫的Fragment的進入與彈齣動畫:https://github.com/nuptboyzhb/FragmentAnimationDemo 那麼,我們如何是一個View隨著手指的移動而移動呢?


1.onTouch事件


我們為view添加onTouch事件,擷取移動過程中,手指相對螢幕的位置資訊:[code]

@Overridepublic boolean onTouch(View v, MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN:break;case MotionEvent.ACTION_MOVE:moveViewWithFinger(view, event.getRawX(), event.getRawY());break;case MotionEvent.ACTION_UP:break;}return true;}

2.方法1:setLayoutParams


獲得手指的位置之後,就可以通過動態設定View的布局,達到“移動”view的目的。[code]

/** * 設定View的布局屬性,使得view隨著手指移動 注意:view所在的布局必須使用RelativeLayout 而且不得設定置中等樣式 *  * @param view * @param rawX * @param rawY */private void moveViewWithFinger(View view, float rawX, float rawY) {RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) view.getLayoutParams();params.leftMargin = (int) rawX - ivMove.getWidth() / 2;params.topMargin = (int) rawY - topTitleHeight - ivMove.getHeight() / 2;view.setLayoutParams(params);}

3.方法2:view.layout(l,t,r,b)
方法二的局限,主要是對view所在的布局有較高的要求,而layout則沒有太多要求,既可以是RelativeLayout,也可以是LinearLayout。

/** * 通過layout方法,移動view  * 優點:對view所在的布局,要求不苛刻,不要是RelativeLayout,而且可以修改view的大小 *  * @param view * @param rawX * @param rawY */private void moveViewByLayout(View view, int rawX, int rawY) {int left = rawX - ivMove.getWidth() / 2;int top = rawY - topTitleHeight - ivMove.getHeight() / 2;int width = left + view.getWidth();int height = top + view.getHeight();view.layout(left, top, width, height);}

另外,在移動的過程中,還可以動態改變view的大小




4.Surfaceview中的對象
在SurfaceView中,我們更容易移動一個view,可以參見“新版飛機大戰”原始碼[https://github.com/nuptboyzhb/newplanegame]中,主飛機的移動,隨著手指的移動而移動。


5.方法1和2的原始碼:https://github.com/nuptboyzhb/MoveViewWithFinger


-------------------------------------------------------------------

更多交流,Android開發聯盟QQ群:272209595


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.