zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    HDU 4389 数位dp
    Codeforces Round #405 (rated, Div. 2, based on VK Cup 2017 Round 1)A B C 水 并查集 思路
    Codeforces Round #385 (Div. 2)A B C 模拟 水 并查集
    Codeforces Round #404 (Div. 2)A B C二分
    HDU 2586 倍增法求lca
    Codeforces Round #209 (Div. 2)A贪心 B思路 C思路+快速幂
    Codeforces Round #384 (Div. 2) A B C D dfs序+求两个不相交区间 最大权值和
    vim出现“E212: Can't open file for writing”的处理办法
    centos7 开机/etc/rc.local 不执行的问题
    CentOS 系统状况查看
  • 原文地址:https://www.cnblogs.com/klcf0220/p/3493213.html
Copyright © 2011-2022 走看看