Android UI开发第九篇——SlidingDrawer 抽屉效果-阿里云开发者社区

开发者社区> 技术小胖子> 正文

Android UI开发第九篇——SlidingDrawer 抽屉效果

简介:
+关注继续查看

SlidingDrawer是自SDK 1.5才新加入的,实现Launcher的抽屉效果。SlidingDrawer配置上采用了水平展开或垂直展开两种(android:orientation)方式,在XML里必须指定其使用的android:handle与android:content,前者委托要展开的图片(Layout配置),后者则是要展开的Layout Content。

 


  1. <?xml version="1.0" encoding="utf-8"?> 
  2.  
  3. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"      
  4.  
  5.     android:orientation="vertical"      
  6.  
  7.     android:layout_width="fill_parent"      
  8.  
  9.     android:layout_height="fill_parent"    
  10.  
  11.     android:background="@drawable/i1"      
  12.  
  13.     >       
  14.  
  15. <SlidingDrawer       
  16.  
  17.     android:id="@+id/slidingdrawer"      
  18.  
  19.     android:layout_width="fill_parent"      
  20.  
  21.     android:layout_height="fill_parent"      
  22.  
  23.     android:orientation="vertical"      
  24.  
  25.     android:handle="@+id/handle"      
  26.  
  27.     android:content="@+id/content">       
  28.  
  29.     <Button       
  30.  
  31.             android:id="@+id/handle"      
  32.  
  33.             android:layout_width="wrap_content"     
  34.  
  35.             android:layout_height="wrap_content"   
  36.  
  37.             android:background="@drawable/ic_dialog_dialer"      
  38.  
  39.         />       
  40.  
  41.     <LinearLayout       
  42.  
  43.         android:id="@+id/content"      
  44.  
  45.         android:layout_width="fill_parent"      
  46.  
  47.         android:layout_height="fill_parent" 
  48.  
  49.         android:background="@drawable/default_bg">       
  50.  
  51.         <Button       
  52.  
  53.             android:id="@+id/button"      
  54.  
  55.             android:layout_width="wrap_content"      
  56.  
  57.             android:layout_height="wrap_content"      
  58.  
  59.             android:text="Button"      
  60.  
  61.         />       
  62.  
  63.         <EditText       
  64.  
  65.             android:id="@+id/editText"      
  66.  
  67.             android:layout_width="fill_parent"      
  68.  
  69.             android:layout_height="wrap_content"      
  70.  
  71.         />       
  72.  
  73.     </LinearLayout>       
  74.  
  75. </SlidingDrawer>       
  76.  
  77. </LinearLayout>     

补充:

 

 

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


<SlidingDrawer android:layout_width="fill_parent"
android:layout_height="fill_parent" android:handle="@+id/handle"
android:content="@+id/content" android:orientation="vertical"
android:id="@+id/slidingdrawer">
<ImageButton android:id="@id/handle" android:layout_width="50dip"
android:layout_height="44dip" android:src="@drawable/up" />
<LinearLayout android:id="@id/content"
android:layout_width="fill_parent" android:layout_height="fill_parent" 
android:background="#ffffff">
<TextView android:text="这是一个滑动式抽屉的示例" 
android:id="@+id/tv"
android:textSize="18px"
android:textColor="#000000"
android:gravity="center_vertical|center_horizontal"
android:layout_width="match_parent" 
android:textStyle="bold"
android:layout_height="match_parent"></TextView>
</LinearLayout>
</SlidingDrawer>
二、重要属性
android:allowSingleTap:指示是否可以通过handle打开或关闭
android:animateOnClick:指示是否当使用者按下手柄打开/关闭时是否该有一个动画。
android:content:隐藏的内容
android:handle:handle(手柄)

三、重要方法
animateClose():关闭时实现动画。
close():即时关闭
getContent():获取内容
isMoving():指示SlidingDrawer是否在移动。
isOpened():指示SlidingDrawer是否已全部打开
lock():屏蔽触摸事件。
setOnDrawerCloseListener(SlidingDrawer.OnDrawerCloseListener onDrawerCloseListener):SlidingDrawer关闭时调用
unlock():解除屏蔽触摸事件。
toggle():切换打开和关闭的抽屉SlidingDrawer。

四、完整实例
1.布局文件slidingdrawer.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:orientation="vertical" android:background="@drawable/default_bg">
<SlidingDrawer android:layout_width="fill_parent"
android:layout_height="fill_parent" android:handle="@+id/handle"
android:content="@+id/content" android:orientation="vertical"
android:id="@+id/slidingdrawer">
<ImageButton android:id="@id/handle" android:layout_width="50dip"
android:layout_height="44dip" android:src="@drawable/up" />
<LinearLayout android:id="@id/content"
android:layout_width="fill_parent" android:layout_height="fill_parent" 
android:background="#ffffff">
<TextView android:text="这是一个滑动式抽屉的示例" 
android:id="@+id/tv"
android:textSize="18px"
android:textColor="#000000"
android:gravity="center_vertical|center_horizontal"
android:layout_width="match_parent" 
android:textStyle="bold"
android:layout_height="match_parent"></TextView>
</LinearLayout>
</SlidingDrawer>
</LinearLayout>
2.Java代码


package com.wjq;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ImageButton;
import android.widget.SlidingDrawer;
import android.widget.TextView;
public class SlidingDrawerDemo extends Activity {
private SlidingDrawer mDrawer;
private ImageButton imbg;
private Boolean flag=false;
private TextView tv;
/* (non-Javadoc)
* @see android.app.Activity#onCreate(android.os.Bundle)
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.sildingdrawer);

imbg=(ImageButton)findViewById(R.id.handle);
mDrawer=(SlidingDrawer)findViewById(R.id.slidingdrawer);
tv=(TextView)findViewById(R.id.tv);

mDrawer.setOnDrawerOpenListener(new SlidingDrawer.OnDrawerOpenListener()
{
@Override
public void onDrawerOpened() {
flag=true;
imbg.setImageResource(R.drawable.down);
}

});

mDrawer.setOnDrawerCloseListener(new SlidingDrawer.OnDrawerCloseListener(){
@Override
public void onDrawerClosed() {
flag=false;
imbg.setImageResource(R.drawable.up);
}

});

mDrawer.setOnDrawerScrollListener(new SlidingDrawer.OnDrawerScrollListener(){
@Override
public void onScrollEnded() {
tv.setText("结束拖动");
}
@Override
public void onScrollStarted() {
tv.setText("开始拖动");
}

});

}
}
 
 
 
 



     本文转自xyz_lmn51CTO博客,原文链接:http://blog.51cto.com/xyzlmn/817346,如需转载请自行联系原作者



 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Java教程:Nginx静态资源配置命令介绍
  Nginx静态资源的配置指令   listen指令   listen:用来配置监听端口。   语法   listen address[:port] [default_server]...; listen port [default_server]...;   默认值   listen *:80 | *:8000   位置   server   listen的设置比较灵活,我们通过几个例子来把常用的设置方式熟悉下:   listen 127.0.0.1:8000; // listen localhost:8000 监听指定的IP和端口   listen 127.0.0
10 0
使用JPA + Eclipselink操作PostgreSQL数据库
使用JPA + Eclipselink操作PostgreSQL数据库
4 0
java结合android和ios的三端非对称接口加密讲解
  算法:有rsa及aes算法   Java端处理方式:   入参处理方式   1、参数通过request.getParameter获取的话,可以通过自己定义一个filter来进行处理。   定义两个类,分别继承HttpServletRequestWrapper及Filter,将该filter配置到web.xml里面,在其他filter前面,以免影响程序获取参数的调用   public class SafeTextRequestWrapper extends HttpServletRequestWrapper {   public SafeTextRequestWrapper(H
9 0
在 conf 下的 web.xml 文件内容介绍 | 学习笔记
快速学习在 conf 下的 web.xml 文件内容介绍。
4 0
Apache Spark,Parquet和麻烦的Null
  关于类型安全性的经验教训,并承担过多   介绍   在将SQL分析ETL管道迁移到客户端的新Apache Spark批处理ETL基础结构时,我注意到了一些奇特的东西。 开发的基础结构具有可为空的DataFrame列架构的概念。 乍看起来似乎并不奇怪。 大多数(如果不是全部)SQL数据库都允许列为可空或不可空,对吗? 让我们研究一下在创建Spark DataFrame时,这种看似明智的概念为什么会带来问题。   from pyspark.sql import types   schema=types.StructType([
5 0
BS与CS的联系和差异
  一、什么是CS?   CS(Client/Server):客户端----服务器结构。它的主要特点是交互性强、具有安全的存取模式、网络通信量低、响应速度快、利于处理大量数据。因为客户端要负责绝大多数的业务逻辑和UI展示,又称为胖客户端。它充分利用两端硬件,将任务分配到Client 和Server两端,降低了系统的通讯开销。   C/S结构的软件需要针对不同的操作系统系统开发不同版本的软件,加之产品的更新换代十分快,已经很难适应百台电脑以上局域网用户同时使用。   C/S 架构是一种典型的两层架构,其客户端包含一个或多个在用户的电脑上运行的程序,而服务器端有两种,一种是数据库服务器端,客
9 0
centos7.3部署MongoDB4.0.1 实际教程
  Centos7.3安装MongoDB   上传软件包   1. 解包   tar zxvf mongodb-linux-x86_64-rhel70-4.0.1.tgz   2. 把解压出来的包更改名称   mv mongodb-linux-x86_64-rhel70-4.0.1 mongodb4.0.1   3. 在/usr/local下创建目录并把包移动过去
8 0
手机秒变投篮机,还能模拟投篮真实手感,腾讯微视技术「家底」到底有多厚?
小小的 AR 投篮机背后包含着哪些技术?我们和腾讯微视技术团队聊了聊。
6 0
Django model字段类型解析
  Model字段认识   V=models.CharField(max_length=None<, **options>)    #varchar   V=models.EmailField()    #varchar   V=models.URLField()    #varchar   V=models.FileField(upload_to=None<, max_length=100, **options>)    #varchar #upload_to指定保存目录可带格式,   V=models.ImageField(upload_to=None<, height_fie
6 0
使用Eclipse连接SAP云平台上的HANA数据库实例
使用Eclipse连接SAP云平台上的HANA数据库实例
4 0
13262
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载