前言html
本章內容是android.widget.SlidingDrawer,譯爲"滑動式抽屜",版本爲Android 3.0 r1,翻譯來自"xiaoQLu",含示例代碼,歡迎訪問它的博客:"http://www.cnblogs.com/xiaoQLu",再次感謝"xiaoQLu" !期待你一塊兒參與Android API的翻譯,聯繫我over140@gmail.com。
java
聲明android
歡迎轉載,但請保留文章原始出處:)
ide
博客園:http://www.cnblogs.com/函數
Android中文翻譯組:http://goo.gl/6vJQl
佈局
正文學習
1、結構public class SlidingDrawer extends ViewGroup動畫
java.lang.Objectui
android.view.Viewspa
android.view.ViewGroup
android.widget.SlidingDrawer
2、概述
3、內部類
interface SlidingDrawer.OnDrawerCloseListener
當drawer(抽屜)關閉時調用
interface SlidingDrawer.OnDrawerOpenListener
當drawer(抽屜)打開時調用
interface SlidingDrawer.OnDrawerScrollListener
當drawer(抽屜)滑動(滾動)時調用
4、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頂部的額外距離 |
5、常量
public static final int ORIENTATION_HORIZONTAL
(譯者注:水平方向對齊)
常量值:0 (0x00000000)
public static final int ORIENTATION_VERTICAL
(譯者注:垂直方向對齊)
常量值:1 (0x00000001)
6、構造函數
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 要應用到這個組件上的樣式
7、公共方法
public void animateClose ()
動畫效果關閉抽屜。
參見
public void animateOpen ()
動畫效果打開抽屜。
參見
public void animateToggle ()
在打開和關閉抽屜之間動畫切換
參見
public void close ()
當即關閉抽屜
參見
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,忽略觸摸事件
參見
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事件。
參數
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使觸摸事件能被處理
參見
8、補充
文章精選
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.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
結構
繼承關係
public static interface SlidingDrawer.OnDrawerScrollListener
android.widget.SlidingDrawer.OnDrawerScrollListener
類概述
當抽屜被滾動時調用
公共方法
public abstract void onScrollEnded ()
當用戶中止拖曳/滑動抽屜的handle時調用
public abstract void onScrollStarted ()
當用戶開始拖曳/滑動抽屜的handle時調用