Android中View的基礎知識

來源:互聯網
上載者:User

標籤:

View的界限

View就是我們看到的介面,有四個界限範圍分別是, Top/Left, Bottom/Right,座標系從左上到右下。這四個值可以通過任何View的子類調用getTop()/get...得到。

但是坑爹的是這些不能在生命週期函數裡調用,否則都返回0,因為繪製還沒完成呢,可以放在button的onclicklistener中。

事件的種類

分為MotionEvent和TouchSlop,分為ACTION_DOWN, ACTION_MOVE, ACTION_UP。

MotionEvent是點擊之後的event可以通過getX()/getY()/getRawX()/getRawY()來得到點擊的位置,區別是一個是相對當前View的,一個是相對手機螢幕左上方的。

TouchSlop是系統能識別出的最小滑動距離。可以通過

VelocityTracker用開跟蹤划動過程中的速度

GestureDetector用來檢測使用者的單擊、滑動、長按、雙擊行為。

Scroller用來彈性滑動對象。

划動的方式

划動的方式主要有3中,分別是通過View本身提供的scrollTo/scrollBy方法。第二種是通過動畫給View施加平移效果。第三種是通過改變view的LayoutParams使得View重新布局從而實現滑動。

第一種,scrollTo/scrollBy只是改變View的內容而不是View本身的位置,View本身的位置是不變的(getScrollX是改變的,但是getTop/getLeft/getBottom/getRight不變)。

有點是操作簡單,適合對View的內容進行滑動。

第二種是動畫,優點是操作簡單,適用於沒有互動的view和實現複雜的動畫效果。

第三種是改變布局參數,優點是適用於有互動的View,缺點是操作稍微複雜。

事件分發機制

點擊事件的分發就是對MotionEvent事件的分發過程,由三個主要的方法共同完成:dispatchTouchEvent(), onInterceptTouchEvent(), onTouchEvent()

只要點擊事件傳遞到了當前view,dispatchTouchEvent方法一定會被調用他們之間的關係可以用表示:

    @Override    public boolean dispatchTouchEvent(MotionEvent event) {        boolean consume = false;        if (onInterceptTouchEvent(event)){            consume = onTouchEvent(event);        } else {            consume = child.dispatchTouchEvent(event);        }        return consume;    }

對於ViewLayout來說,處理的順序是:

MainActivity-dispatchTouchEvent-ACTION_DOWN
CustomLayout-dispatchTouchEvent-ACTION_DOWN
CustomLayout-onInterceptTouchEvent-ACTION_DOWN
CustomButton-dispatchTouchEvent-ACTION_DOWN
CustomButton-onTouch-ACTION_DOWN
CustomButton-onTouchEvent-ACTION_DOWN
MainActivity-dispatchTouchEvent-ACTION_UP
CustomLayout-dispatchTouchEvent-ACTION_UP
CustomLayout-onInterceptTouchEvent-ACTION_UP
CustomButton-dispatchTouchEvent-ACTION_UP
CustomButton-onTouch-ACTION_UP
CustomButton-onTouchEvent-ACTION_UP
CustomButton--onClick

對View來說,處理的順序是:

MainActivity-dispatchTouchEvent-ACTION_DOWN
CustomButton-dispatchTouchEvent-ACTION_DOWN
CustomButton-onTouch-ACTION_DOWN
CustomButton-onTouchEvent-ACTION_DOWN
MainActivity-dispatchTouchEvent-ACTION_UP
CustomButton-dispatchTouchEvent-ACTION_UP
CustomButton-onTouch-ACTION_UP
CustomButton-onTouchEvent-ACTION_UP
CustomButton--onClick

詳情請參考:http://blog.csdn.net/lanhuzi9999/article/details/26515421

 

Android中View的基礎知識

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.