Android控件之SlidingDrawer(滑動式抽屜)詳解與執行個體
一、簡介
SlidingDrawer隐藏屏外的内容,并允許使用者通過handle以顯示隐藏内容。它可以垂直或水準滑動,它有倆個View組成,其一是可以拖動的handle,其二是隐藏内容的View.它裡面的控件必須設定布局,在布局檔案中必須指定handle和content.
左右拉抽屜的效果,将 SlidingDrawer屬性設定為android:orientation="horizontal"即可。
<SlidingDrawer
android:id="@+id/slidingDrawer1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:content="@+id/content"
android:handle="@+id/handle" >
<Button
android:id="@+id/handle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/shake_report_dragger_up" />
<LinearLayout
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#f9f9f9" >
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="fitXY"
android:src="@drawable/shake_line_up" />
</LinearLayout>
</SlidingDrawer>
二、重要屬性
android:allowSingleTap:訓示是否可以通過handle打開或關閉
android:animateOnClick:訓示是否當使用者按下搖桿打開/關閉時是否該有一個動畫。
android:content:隐藏的内容
android:handle:handle(搖桿)
三、重要方法
animateClose():關閉時實作動畫。
close():即時關閉
getContent():擷取内容
isMoving():訓示SlidingDrawer是否在移動。
isOpened():訓示SlidingDrawer是否已全部打開
lock():屏蔽觸摸事件。
setOnDrawerOpenListener(new OnDrawerOpenListener():SlidingDrawer打開時調用。
setOnDrawerCloseListener(new onDrawerCloseListener):SlidingDrawer關閉時調用。
SlidingDrawer.OnDrawerScrollListener:SlidingDrawer滑動時調用。
unlock():解除屏蔽觸摸事件。
toggle():切換打開和關閉的抽屜SlidingDrawer。
private SlidingDrawer mDrawer;
private Button mDrawerBtn;
mDrawer = (SlidingDrawer) findViewById(R.id.slidingDrawer1);
mDrawerBtn = (Button) findViewById(R.id.handle);
mDrawer.setOnDrawerOpenListener(new OnDrawerOpenListener(){
public void onDrawerOpened(){
mDrawerBtn.setBackgroundDrawable(getResources().getDrawable(R.drawable.shake_report_dragger_down));
TranslateAnimation titleup = new TranslateAnimation(
Animation.RELATIVE_TO_SELF,0f,
Animation.RELATIVE_TO_SELF,0f,
Animation.RELATIVE_TO_SELF,0f,
Animation.RELATIVE_TO_SELF,-1.0f);
titleup.setDuration(200);
titleup.setFillAfter(true);
}
});
/* 設定SlidingDrawer被關閉的事件處理 */
mDrawer.setOnDrawerCloseListener(new OnDrawerCloseListener(){
public void onDrawerClosed(){
mDrawerBtn.setBackgroundDrawable(getResources().getDrawable(R.drawable.shake_report_dragger_up));
TranslateAnimation titledn = new TranslateAnimation(
Animation.RELATIVE_TO_SELF,0f,
Animation.RELATIVE_TO_SELF,0f,
Animation.RELATIVE_TO_SELF,-1.0f,
Animation.RELATIVE_TO_SELF,0f);
titledn.setDuration(200);
titledn.setFillAfter(false);
}
});
還有注意的是: SlidingDrawer should be used as an overlay inside layouts. This means SlidingDrawer should only be used inside of a FrameLayout or a RelativeLayout for instance, 如果顯示的時候不正常,考慮上面的原因。
This class was deprecated in API level 17,就是活這個類在Android API 17以上是不建議支援使用的了。
官方連結:http://developer.android.com/reference/android/widget/SlidingDrawer.html
參考連結:http://www.apkbus.com/forum.php?mod=viewthread&tid=143669