`
yunlonglove
  • 浏览: 225203 次
社区版块
存档分类
最新评论

Android开发之SlidingDrawer(一)

 
阅读更多

Android开发之SlidingDrawer(一)

/*

* Android开发之SlidingDrawer

* 北京Android俱乐部群:167839253

*Created on: 2012-7-26

*Author: blueeagle

* Email:liujiaxiang@gmail.com

*/

概述

为了方便操作、美观、节约空间等多方面原因的考虑,Android提供了SlidingDrawer这样的控件。SlidingDrawer——一个像抽屉一样的控件,我们暂且就称之为抽屉。这种抽屉的效果随处可见,比如Android通知栏的下拉效果,比如某个网页工具箱的弹出框等等。

我们来看一下SDK中是如何定义的:SlidingDrawer隐藏了再屏幕外的一些内容,并且允许用户用拖拽“手柄”的方式使得内容再次显示于屏幕中。SlidingDrawer可以用于水平和垂直两个方向。一个SlidingDrawer控件由两个子View来组成,一个是“手柄”一个就是拖拽出来的内容。SlidingDrawer应该覆盖在layout上面,这就是说SlidingDrawer应该只被用于一个FrameLayout或者是 RelativeLayout之中。SlidingDrawer的大小定义了它被拖拽出来的内容将占据多大的空间。因此,SlidingDrawer通常使用match_parent来定义其大小。SlidingDrawer还必须定义“手柄”和其内容这两个View的id号。

例如下面的布局文件就是一个简单的SlidingDrawer的描述:

<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>

XML文件中的属性

属性名称

描述

android:allowSingleTap

是否可通过单击handle打开或关闭抽屉。 默认是true。(如果是false,用户必须通过拖动,滑动或者使用轨迹球。)

android:animateOnClick

顾名思义,点击的时候是否有动画。默认是true。

android:bottomOffset

“手柄”距离SlidingDrawer底部的额外距离 。

android:content

SlidingDrawer的内容。

android:handle

SlidingDrawer的“手柄”。

android:orientation

SlidingDrawer的方向。

android:topOffset

“手柄”距离SlidingDrawer顶部的额外距离 。

一些重要的方法:

voidsetOnDrawerCloseListener(SlidingDrawer.OnDrawerCloseListeneronDrawerCloseListener)

设置一个监听器,用来接收当抽屉被关闭时候的通知。

voidsetOnDrawerOpenListener(SlidingDrawer.OnDrawerOpenListeneronDrawerOpenListener)

Since:API Level 3

设置一个监听器,用来接收当抽屉被打开的时候的通知。

voidsetOnDrawerScrollListener(SlidingDrawer.OnDrawerScrollListeneronDrawerScrollListener)

设置一个监听器,用来接收当抽屉处于正在打开或者正在结束的滚动时候的通知。

animateClose():

使用动画关闭抽屉。

animateOpen():

使用动画打开抽屉

getContent():

获取内容

isMoving():

指示SlidingDrawer是否在移动。

isOpened():

指示SlidingDrawer是否已全部打开

lock():

屏蔽触摸事件。

unlock():

解除屏蔽触摸事件。

toggle():

切换打开和关闭的抽屉SlidingDrawer。

一个简单的例子

我们可以引用SDK中给我们提供的XML文件。

JAVA文件中如下编写:

public class SlidingDrawerDemoActivity extends Activity {  
            private SlidingDrawer myDrawer;
            private ImageView myImageView;
            private GridView myGridView;
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);
                myDrawer = (SlidingDrawer) findViewById(R.id.drawer);
                myImageView = (ImageView)findViewById(R.id.handle);
                myGridView = (GridView)findViewById(R.id.content);
                myDrawer.setOnDrawerOpenListener(newSlidingDrawer.OnDrawerOpenListener() {
                    @Override
                    public void onDrawerOpened() {
                        myImageView.setImageResource(R.drawable.down);
                    }
                });
                myDrawer.setOnDrawerCloseListener(newSlidingDrawer.OnDrawerCloseListener() {
                    @Override
                    public void onDrawerClosed() {
                        myImageView.setImageResource(R.drawable.up);
                    }
                });    
                myGridView.setAdapter(new ImageAdapter(this));   
                myGridView.setOnItemClickListener(newOnItemClickListener(){ 
                    @Override 
                    public void onItemClick(AdapterView<?> arg0, Viewarg1, int arg2, 
                            long arg3) { 
                        // TODO Auto-generated method stub 
                        Toast.makeText(SlidingDrawerDemoActivity.this, "你选择了"+(arg2+1)+" 号图片 ", Toast.LENGTH_SHORT).show(); 
                    } 
                });
    }
}

对于ImageAdapter这个类前面我们已经讨论过,这里就不再赘述。上面代码的效果如下:


当然,还需要在GridView的XML文件中添加如下几个参数:

android:numColumns="auto_fit"

android:verticalSpacing="10dp"

android:horizontalSpacing="10dp"

android:columnWidth="90dp"

android:stretchMode="columnWidth"

android:gravity="center"

如果将SildingDrawer的高度属性改变一下例如:android:layout_height="100dip",则效果就会变成如下图所示:


如果将SildingDrawer的topOffset属性改变一下例如:android:topOffset="150dip",则效果就会变成如下图所示:


小结

上述简单的例子显然不能够满足应用开发的需求,我们在写程序的时候,经常遇见从左到右,从上到下,控制SlidingDrawer的大小等需求,要完成这个操作,我们需要自定义一个SlidingDrawer。自定义的SlidingDrawer则相当于是继承了一个LinearLayout,我们会在后面的章节详细讨论如何自定义一个SlidingDrawer。

分享到:
评论

相关推荐

    Android UI开发——SlidingDrawer 抽屉效果

    Android UI开发——SlidingDrawer 抽屉效果~~

    android控件SlidingDrawer的学习应用

    这是我自己编写的一个android 的slidingdrawer应用 效果还可以 希望可以帮助到刚刚学习android的朋友

    Android-SlidingDrawer一个Android滑动抽屉支持ListViewScrollViewRecyclerView

    一个Android滑动抽屉,上滑打开,滑下来关闭,也有自动倒带。 支持正常布局,Listview,ScrollView,RecyclerView。

    Android控件之SlidingDrawer(滑动式抽屉)详解与实例分享

    SlidingDrawer效果想必大家也见到过,它就是1.5模拟器上进入应用程序列表的效果。下面是截图 ...SlidingDrawer android:layout_width=”fill_parent” android:layout_height=”fill_parent” android:handl

    SlidingDrawer侧滑抽屉

    Android SlidingDrawer控件的使用。开发环境Android studio3.0版本

    Android SlidingDrawer 抽屉效果的实现

    SlidingDrawer隐藏屏外的内容,并允许用户通过handle以显示隐藏内容。它可以垂直或水平滑动,它有俩个View组成,其一是可以拖动的handle,其二是隐藏内容的View.它里面的控件必须设置布局,在布局文件中必须指定...

    Android简明应用程序开发[原创]

    第一章 Android开发环境介绍 6 一、下载与安装 6 1.1.1 SDK安装 6 1.1.2 模拟器设置和启动 7 1.1.3 ADT安装 10 二、创建Android工程 13 三、手动选择模拟器 16 四、真机调试 18 五、小结——恭喜您迈出...

    Android开发中常用的功能

    "SlidingDrawer抽屉效果","Android顶部与底部菜单","GroupActivity测试","Android平台水波效果源码","Android中ListView气泡显示", "桌面弹性滑动效果实现","3D相册(重写Gallery)","Activity的切换动画效果","仿...

    Android典型技术模块开发详解

    第一篇 Android开发初步 第1章 Android初识 1.1 Android简介 1.1.1 认识Android 1.1.2 Android系统框架 1.1.3 应用程序框架 1.2 Eclipse开发环境 1.2.1 安装ADT插件 1.2.2 安装SDK 1.2.3 配置源代码 1.2.4 创建AVD ...

    Android高手进阶教程.pdf

    Android 高手进阶教程(二)之----Android Launcher 抽屉类 SlidingDrawer 的 使用 最近在研究 Lanucher ,看了源码,发现了 SlidingDrawer 这个类,也就是 所谓的"抽屉"类。它的用法很简单,要包括 handle ,和 content...

    Android开发之DrawerLayout实现抽屉效果

    主要介绍了Android开发之DrawerLayout实现抽屉效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    android几个经典的效果实现

    集合了几个经典的效果实现。... 2、自定义位置和样式的半透明对话框,实现悬浮于特定控件下的菜单效果。 3、slidingdrawer滑动式抽屉效果实现 4、图像镜像效果,即垂直...学习android应用开发的可以参考一下,很有用的。

    Android提高之多方向抽屉实现方法

    SlidingDrawer是android官方控件之一,但是本文的主角并不是它,而是民间的控件工具集合:android-misc-widgets。android-misc-widgets里面包含几个widget:Panel、SmoothButton、Switcher、VirtualKeyboard,还有...

    The Busy Coder's Guide to Android Development, Version 8.12 support android8.1

    Retired the chapter on dynamic code, the chapter on Android Things, the chapter on SlidingDrawer (from the Widget Catalog), and the chapter on large screen strategies, as well as some other specific ...

    Android编程实现抽屉效果的方法详解

    android的UI开发确实是一件很有趣的事情,也是一件很有挑战性的事情。 本文章是将自己在开发中的项目中使用到的比较好的抽屉效果的原理以及代码整理后写上来的,以备忘记后可以查阅 抽屉效果的原理很简单,就是给其...

    Android 1.5 1.6 2.0 2.1 2.2 的区别详解

    Android 1.5 API变更概要:UI framework· Framework for easier background/UI thread interaction· 新SlidingDrawer 组件· 新HorizontalScrollview 组件AppWidget framework· 一些关于创建桌面AppWidget 的API....

Global site tag (gtag.js) - Google Analytics