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的方向。必須是下面的一個值:
| |||||||||
| 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)
???????????用xml中設置的屬性來創建一個新的SlidingDrawe
參數
context????上下文
attrs???????? XML中定義的屬性
defStyle????要應用到這個組件上的樣式
?
七、公共方法
public void?animateClose?()
動畫效果關閉抽屜。
參見
close()
open()
animateOpen()
animateToggle()
toggle()
?
public void?animateOpen?()
動畫效果打開抽屜。
參見
?
close()
open()
animateOpen()
animateToggle()
toggle()
?
?
public void?animateToggle?()
在打開和關閉抽屜之間動畫切換
參見
?
close()
open()
animateOpen()
animateToggle()
toggle()
?
?
public void?close?()
立即關閉抽屜
參見
open()
toggle()
?animateClose()?
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,忽略觸摸事件
??????????? 參見
?????????????????? ???unlock()
?
public boolean?onInterceptTouchEvent?(MotionEvent event)
實現這個方法可以攔截所有的觸屏事件,它在事件被傳到子類之前攔截,并獲得當前手勢的所有權。
使用這個方法時要注意,因為它與View.onTouchEvent(MotionEvent)有一個相當復雜的交互,使用它需要用正確的方法來實現。事件會按照下列順序接受:
1.?????????down事件會被首先傳到本方法中。
2.?????????這個down事件會被當前viewgroup的onTouchEvent()方法或者其各個子視圖處理,也就是說你應該實現onTouchEvent()方法并返回true,你會繼續看到剩下事件的傳遞(而不是找一個parent view處理它)。同樣的,從onTouchEvent()中返回true,你不會在onInterceptTouchEvent()中接受到任何接下來的事件,并且所有的事件都會被onTouchEvent()處理。
3.?????????如果當前方法返回false,所有接下來的事件(截止到最后包含注冊的事件)首先都會被繼續傳到這里,然后一起傳遞給目標的onTouchEvent()方法。截至及包括最后注冊。
4.?????????如果在這里返回true,將不會收到以下任何事件:目標view將收到同樣的事件但是是伴隨ACTION_CANCEL事件,并且所有的更進一步的事件將會傳遞到你自己的onTouchEvent()方法中而不會再在這里出現。
(譯者著:這里實在是太麻煩了,很不好懂,我自己看著都頭暈,在網上找到一篇很不錯的總結,才知道是怎么回事,這里總結一下,記住這個原則你就會很清楚了:
1、onInterceptTouchEvent()是用于處理事件(類似于預處理,當然也可以不處理)并改變事件的傳遞方向,也就是決定是否允許Touch事件繼續向下(子控件)傳遞,一但返回True(代表事件在當前的viewGroup中會被處理),則向下傳遞之路被截斷(所有子控件將沒有機會參與Touch事件),同時把事件傳遞給當前的控件的onTouchEvent()處理;如果返回false,則把事件交給子控件的onInterceptTouchEvent()處理
2、onTouchEvent()用于處理事件,返回值決定當前控件是否消費(consume)了這個事件,也就是說在當前控件在處理完Touch事件后,是否還允許Touch事件繼續向上(父控件)傳遞,一但返回True,則父控件不用操心自己來處理Touch事件。
相關文章這里1、這里2)
???????????????????參數
???????? ?????????????????? event????????分層次的動作事件
???????????????????返回值
??如果將運動事件從子視圖中截獲并且通過onTouchEvent()發送到當前ViewGroup?,返回true。當前目標將會收到ACTION_CANCEL事件,并且不再會有其他消息傳遞到此。
????????
public boolean?onTouchEvent?(MotionEvent event)
???????????實現觸摸屏幕事件的方法
???????? ?? 參數
????????????????? event????????當前事件
???????? ??? ??返回值
????????????????? 如果事件被處理就返回true,否則返回false
?
public void?open?()
立即打開抽屜
??????????? 參見
????????????????? toggle()
close()
animateOpen()
?
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?()
???????????在抽屜打開或關閉狀態之間切換。事件會立即產生。
??????????? 參見
?
close()
open()
animateOpen()
animateToggle()
toggle()
?
?
public void?unlock?()
???????????解鎖SlidingDrawer使觸摸事件能被處理
??????????? 參見
??????????????????????lock()
?
八、補充
文章精選
???? ?? ???Android高手進階教程(二)之----Android Launcher抽屜類SlidingDrawer的使用
???? ?? ???SlidingDrawer?抽屜類{Android學習指南}
MotionEvent事件在onInterceptTouchEvent()、onTouchEvent()中的傳遞順序
http://hi.baidu.com/j_fo/blog/item/7321c91324203437dc54017d.html
http://www.cnblogs.com/rocky_yi/archive/2011/01/21/1941522.html#
?
示例代碼
<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
譯者鏈接:http://www.cnblogs.com/xiaoQLu
版本:Android 3.0 r1
?
結構
繼承關系
public static interface?SlidingDrawer.OnDrawerCloseListener
?
android.widget.SlidingDrawer.OnDrawerCloseListener
?
類概述
當抽屜被關閉時調用的回調。
?
公共方法
public abstract void?onDrawerClosed()
當抽屜被完全關閉時調用
?
補充
文章精選
Android控件之SlidingDrawer(滑動式抽屜)詳解與實例
?
?
SlidingDrawer.OnDrawerOpenListener
譯者署名:xiaoQLu
譯者鏈接:http://www.cnblogs.com/xiaoQLu
版本:Android 3.0 r1
?
結構
繼承關系
public static interface?SlidingDrawer.OnDrawerOpenListener
?
android.widget.SlidingDrawer.OnDrawerOpenListener
?
類概述
當抽屜被打開時調用
?
公共方法
public abstract void?onDrawerOpened()
當抽屜被完全打開時調用
?
?
SlidingDrawer.OnDrawerScrollListener
?
譯者署名:xiaoQLu
譯者鏈接:http://www.cnblogs.com/xiaoQLu
版本:Android 3.0 r1
結構
繼承關系
public static interface?SlidingDrawer.OnDrawerScrollListener
android.widget.SlidingDrawer.OnDrawerScrollListener
?
類概述
當抽屜被滾動時調用
?
公共方法
?
public abstract void?onScrollEnded?()
當用戶停止拖曳/滑動抽屜的handle時調用
?
public abstract void?onScrollStarted?()
當用戶開始拖曳/滑動抽屜的handle時調用
本文轉自over140 51CTO博客,原文鏈接:http://blog.51cto.com/over140/582369,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的Android 3.0 r1 API中文文档(113) ——SlidingDrawer的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NA-NP-IE系列实验18:ip de
- 下一篇: cat /proc/maps 进程内存映