天天看點

Android 3.0 r1 API中文文檔(113) ——SlidingDrawer

一、結構

public class SlidingDrawer extends ViewGroup

java.lang.Object

android.view.View

         android.view.ViewGroup

                   android.widget.SlidingDrawer

二、概述

    SlidingDrawer(滑動式抽屜)隐藏屏外的内容,并允許使用者拖拽一個handle以顯示隐藏的内容。SlidingDrawer可以在垂直或者水準使用。它由兩個子視圖組成:一個是使用者拖拽的handle(柄),另一個是随着拖動變化的content(内容)。SlidingDrawer應當作為内部布局的覆寫來使用,也就是說SlidingDrawer内部應該使用FrameLayout或RelativeLayout布局。SlidingDrawer的大小決定了其内容顯示時所占空間的大小,是以它的尺寸一般定義為match_parent。在XML布局中SlidingDrawer必須指定handle和content的id:

    

三、内部類

    interface          SlidingDrawer.OnDrawerCloseListener       

    當drawer(抽屜)關閉時調用

    interface          SlidingDrawer.OnDrawerOpenListener      

    當drawer(抽屜)打開時調用

    interface          SlidingDrawer.OnDrawerScrollListener       

    當drawer(抽屜)滑動(滾動)時調用

四、XML屬性

屬性名稱

描述

android:allowSingleTap

訓示是否可通過單擊handle打開或關閉(如果是false,剛使用者必須通過拖動,滑動或者使用軌迹球,來打開/關閉抽屜。)預設的是true。

android:animateOnClick

訓示當使用者點選handle的時候,抽屜是否以動畫的形式打開或關閉。預設的是true。

android:bottomOffset

Handle距離SlidingDrawer底部的額外距離

android:content

辨別SlidingDrawer的内容

android:handle

辨別SlidingDrawer的handle(譯者注:如按鈕)

android:orientation

SlidingDrawer的方向。必須是下面的一個值:

常量

horizontal

水準方向對齊

vertical

1

豎直方向對齊

android:topOffset

Handle距離SlidingDrawer頂部的額外距離

五、常量

    public static final int ORIENTATION_HORIZONTAL

      (譯者注:水準方向對齊)

  常量值:0 (0x00000000)

  public static final int ORIENTATION_VERTICAL

          (譯者注:垂直方向對齊)

  常量值:1 (0x00000001)

六、構造函數

  public SlidingDrawer (Context context, AttributeSet attrs)

           用xml中設定的屬性來建立一個新的SlidingDrawe

  參數

  context    上下文

  attrs        XML中定義的屬性

  public SlidingDrawer (Context context, AttributeSet attrs, int defStyle)

  attrs         XML中定義的屬性

  defStyle    要應用到這個元件上的樣式

七、公共方法

  public void animateClose ()

  動畫效果關閉抽屜。

      參見

  public void animateOpen ()

  動畫效果打開抽屜。

  public void animateToggle ()

  在打開和關閉抽屜之間動畫切換

    參見

  public void close ()

  立即關閉抽屜

  參見

  public View getContent ()

  傳回抽屜的内容(content)

    傳回值

  傳回在抽屜内容的視圖,它在XML中是用“content”id 辨別的

  public View getHandle ()

           傳回抽屜的handle

            傳回值

   傳回在抽屜handle的視圖,它在XML中是用“handle”id 辨別的

  public boolean isMoving ()

           抽屜是否在滾動或滑動。

             傳回值

                   如果在滾動或滑動,傳回true,否則傳回false        

  public boolean isOpened ()

           目前抽屜是否被完全打開

                   如果是打開的,傳回true,否則傳回false。

  public void lock ()

           鎖定SlidingDrawer,忽略觸摸事件

             參見

  public boolean onInterceptTouchEvent (MotionEvent event)

  實作這個方法可以攔截所有的觸屏事件,它在事件被傳到子類之前攔截,并獲得目前手勢的所有權。

  1.         down事件會被首先傳到本方法中。

  2.         這個down事件會被目前viewgroup的onTouchEvent()方法或者其各個子視圖處理,也就是說你應該實作onTouchEvent()方法并傳回true,你會繼續看到剩下事件的傳遞(而不是找一個parent view處理它)。同樣的,從onTouchEvent()中傳回true,你不會在onInterceptTouchEvent()中接受到任何接下來的事件,并且所有的事件都會被onTouchEvent()處理。

  3.         如果目前方法傳回false,所有接下來的事件(截止到最後包含注冊的事件)首先都會被繼續傳到這裡,然後一起傳遞給目标的onTouchEvent()方法。截至及包括最後注冊。

  (譯者著:這裡實在是太麻煩了,很不好懂,我自己看着都頭暈,在網上找到一篇很不錯的總結,才知道是怎麼回事,這裡總結一下,記住這個原則你就會很清楚了:

  1、onInterceptTouchEvent()是用于處理事件(類似于預處理,當然也可以不處理)并改變事件的傳遞方向,也就是決定是否允許Touch事件繼續向下(子控件)傳遞,一但傳回True(代表事件在目前的viewGroup中會被處理),則向下傳遞之路被截斷(所有子控件将沒有機會參與Touch事件),同時把事件傳遞給目前的控件的onTouchEvent()處理;如果傳回false,則把事件交給子控件的onInterceptTouchEvent()處理

  2、onTouchEvent()用于處理事件,傳回值決定目前控件是否消費(consume)了這個事件,也就是說在目前控件在處理完Touch事件後,是否還允許Touch事件繼續向上(父控件)傳遞,一但傳回True,則父控件不用操心自己來處理Touch事件。

                   參數

                            event        分層次的動作事件

                   傳回值

    如果将運動事件從子視圖中截獲并且通過onTouchEvent()發送到目前ViewGroup ,傳回true。目前目标将會收到ACTION_CANCEL事件,并且不再會有其他消息傳遞到此。

  public boolean onTouchEvent (MotionEvent event)

           實作觸摸螢幕事件的方法

             參數

                   event        目前事件

               傳回值

                   如果事件被處理就傳回true,否則傳回false

  public void open ()

  立即打開抽屜

  public void setOnDrawerCloseListener(SlidingDrawer.OnDrawerCloseListener onDrawerCloseListener)

           給抽屜的關閉事件綁定監聽器

             參數

                   onDrawerCloseListener 抽屜關閉時的監聽器

  public void setOnDrawerOpenListener(SlidingDrawer.OnDrawerOpenListener onDrawerOpenListener)

           給抽屜的打開事件綁定監聽器

                            onDrawerOpenListener 抽屜打開時的鑒别器

  public void setOnDrawerScrollListener (SlidingDrawer.OnDrawerScrollListener onDrawerScrollListener)

  給抽屜的滾動(收縮)事件綁定監聽器,輕滑(fling)也被當作一個滾動(收縮)事件,同時它可以觸發抽屜關閉或者打開事件。

       參數

            onDrawerScrollListener 當滾動(收縮)開始或者停止時通知的監聽器

  public void toggle ()

           在抽屜打開或關閉狀态之間切換。事件會立即産生。

  public void unlock ()

           解鎖SlidingDrawer使觸摸事件能被處理

八、補充

    文章精選

  MotionEvent事件在onInterceptTouchEvent()、onTouchEvent()中的傳遞順序

    示例代碼

<SlidingDrawer

     android:id="@+id/drawer"

     android:layout_width="match_parent"

     android:layout_height="match_parent"

     android:handle="@+id/handle"

     android:content="@+id/content">

     <ImageView

         android:id="@id/handle"

         android:layout_width="88dip"

         android:layout_height="44dip" />

     <GridView

         android:id="@id/content"

         android:layout_width="match_parent"

         android:layout_height="match_parent" />

 </SlidingDrawer>

SlidingDrawer.OnDrawerCloseListener

譯者署名:xiaoQLu

版本:Android 3.0 r1

結構

繼承關系

public static interface SlidingDrawer.OnDrawerCloseListener

android.widget.SlidingDrawer.OnDrawerCloseListener 

類概述

當抽屜被關閉時調用的回調。

公共方法

public abstract void onDrawerClosed()

當抽屜被完全關閉時調用

補充

文章精選

<a href="http://www.cnblogs.com/salam/archive/2010/10/19/1855511.html">Android控件之SlidingDrawer(滑動式抽屜)詳解與執行個體</a>

SlidingDrawer.OnDrawerOpenListener

public static interface SlidingDrawer.OnDrawerOpenListener

android.widget.SlidingDrawer.OnDrawerOpenListener 

當抽屜被打開時調用

public abstract void onDrawerOpened()

當抽屜被完全打開時調用

SlidingDrawer.OnDrawerScrollListener

public static interface SlidingDrawer.OnDrawerScrollListener

android.widget.SlidingDrawer.OnDrawerScrollListener

當抽屜被滾動時調用

public abstract void onScrollEnded ()

當使用者停止拖曳/滑動抽屜的handle時調用

public abstract void onScrollStarted ()

當使用者開始拖曳/滑動抽屜的handle時調用

繼續閱讀