Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android編程入門 >> Android:View隨手指移動

Android:View隨手指移動

編輯:Android編程入門

View的自動移動,我們可以設置動畫,如之類提到的 ViewCompat,Animation。

如何是View隨著手指的移動而移動呢? 

在onTouch事件實現

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

 

說明:

onTouch(View view,MotionEvent event)這個方法中,

getRawX()和getRawY()獲得的是相對屏幕的位置,

getX()和getY()獲得的永遠是view的觸摸位置坐標(這兩個值不會超過view的長度和寬度)。

如是Activity中的 onTouchEvent(MotionEvent event) 方法,這個時候獲得的是屏幕點擊位置的坐標。getRawX()與getX()訪求獲取的值是一樣的。

 

方法1:setLayoutParams

/**

   * 設置View的布局屬性,使得view隨著手指移動 注意:view所在的布局必須使用RelativeLayout 而且不得設置居中等樣式  

   */

 private void moveView(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);
}

 

 

方法2:view.layout(l,t,r,b)

/**
 * 通過layout方法,移動view 
 * 優點:對view所在的布局,要求不苛刻,不要是RelativeLayout,而且可以修改view的大小
 */
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);
}

 

方法3:ScrollBy()或者ScrollTo();

/** 

 * 在activity中實現
 * scrollBy() 相對於當前的坐標進行偏移
 * scrollTo() 相對於屏幕的左上角進行偏移
 * @param event
 */
@Override
public boolean onTouchEvent(MotionEvent event) {
    switch (event.getAction()){
        case MotionEvent.ACTION_DOWN:
            currentX= (int) event.getX();
            currentY= (int) event.getY();
            break;
        case MotionEvent.ACTION_MOVE:
            int x2= (int) event.getX();
            int y2= (int) event.getY();
            container.scrollBy(currentX - x2, currentY - y2);
            currentY=y2;
            currentX=x2;
            xyValue.setText(x2+","+y2);
            break;
        case MotionEvent.ACTION_UP:
            break;
    }
    return true;
}

 



來自何問起

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved