天天看點

Android: SlidingDrawer(滑動式抽屜)

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