android之SlidingDrawer 抽屉效果

    SlidingDrawer(滑动式抽屉)隐藏屏外的内容,并允许用户拖拽一个handle以显示隐藏的内容。它由两个子视图组成:一个是用户拖拽的handle(柄),另一个是随着拖动变化的content(内容)。SlidingDrawer应当作为内部布局的覆盖来使用,也就是说SlidingDrawer内部应该使用FrameLayout或RelativeLayout布局。SlidingDrawer的大小决定了其内容显示时所占空间的大小,所以它的尺寸一般定义为match_parent。在XML布局中SlidingDrawer必须指定handle和content的id.

其中:

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

android:animateOnClick    指示当用户点击handle的时候,抽屉是否以动画的形式打开或关闭。默认的是true。

android:bottomOffset      Handle距离SlidingDrawer底部的额外距离

android:content              标识SlidingDrawer的内容

android:handle               标识SlidingDrawer的han

  实现这个方法可以拦截所有的触屏事件,它在事件被传到子类之前拦截,并获得当前手势的所有权。

  使用这个方法时要注意,因为它与View.onTouchEvent(MotionEvent)有一个相当复杂的交互,使用它需要用正确的方法来实现。事件会按照下列顺序接受:
1. down事件会被首先传到本方法中。
2. 这个down事件会被当前viewgroup的onTouchEvent()方法或者其各个子视图处理,也就是说你应该实现onTouchEvent()方法并返回true,你会继续看到剩下事件的传递  (而不是找一个parent view处理它)。同样的,从onTouchEvent()中返回true,你不会在onInterceptTouchEvent()中接受到任何接下来的事件,并且所有的事件都会被  onTouchEvent()处理。
3. 如果当前方法返回false,所有接下来的事件(截止到最后包含注册的事件)首先都会被继续传到这里,然后一起传递给目标的onTouchEvent()方法。截至及包括最后注册。
4. 如果在这里返回true,将不会收到以下任何事件:目标view将收到同样的事件但是是伴随ACTION_CANCEL事件,并且所有的更进一步的事件将会传递到你自己的  onTouchEvent()方法中而不会再在这里出现。

 

  以上说明在网上可以找到相关的注解,如下:

  1、onInterceptTouchEvent()是用于处理事件(类似于预处理,当然也可以不处理)并改变事件的传递方向,也就是决定是否允许Touch事件继续向下(子控件)传递,一但返回True(代表事件在当前的viewGroup中会被处理),则向下传递之路被截断(所有子控件将没有机会参与Touch事件),同时把事件传递给当前的控件的onTouchEvent()处理;如果返回false,则把事件交给子控件的onInterceptTouchEvent()处理
  2、onTouchEvent()用于处理事件,返回值决定当前控件是否消费(consume)了这个事件,也就是说在当前控件在处理完Touch事件后,是否还允许Touch事件继续向上(父控件)传递,一但返回True,则父控件不用操心自己来处理Touch事件。

 

先看这张效果图吧 

先贴出main.xml的代码,代码中需要的图片自己解决

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     >  
  7.     <SlidingDrawer   
  8.         android:id="@+id/slidingDrawer"  
  9.         android:layout_width="fill_parent"  
  10.         android:layout_height="fill_parent"  
  11.         android:orientation="vertical"  
  12.         android:handle="@+id/handle"  
  13.         android:content="@+id/content">  
  14.         <ImageButton   
  15.             android:id="@+id/handle"  
  16.             android:layout_width="wrap_content"  
  17.             android:layout_height="wrap_content"  
  18.             android:src="@drawable/button_up"/>  
  19.             <LinearLayout   
  20.                 android:id="@+id/content"  
  21.                 android:layout_width="wrap_content"  
  22.                 android:layout_height="wrap_content"  
  23.                 android:background="#ffffff">  
  24.                   
  25.                 <TextView android:text="ceshi"  
  26.                     android:id="@+id/textView"  
  27.                     android:layout_width="wrap_content"  
  28.                     android:layout_height="wrap_content"/>  
  29.             </LinearLayout>  
  30.     </SlidingDrawer>  
  31. </LinearLayout>  

 

 

  1. package com.dapp;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.HashMap;  
  5. import java.util.List;  
  6.   
  7. import android.app.Activity;  
  8. import android.content.Context;  
  9. import android.os.Bundle;  
  10. import android.view.View;  
  11. import android.view.ViewGroup;  
  12. import android.widget.BaseAdapter;  
  13. import android.widget.ImageButton;  
  14. import android.widget.SlidingDrawer;  
  15. import android.widget.TextView;  
  16.   
  17. public class ChoutiActivity extends Activity {  
  18.     private SlidingDrawer mdrawer;  
  19.     private ImageButton mButton;  
  20.     private TextView mText;  
  21.     private boolean flag;  
  22.     private HashMap<String, Object> map;  
  23.       
  24.     public void onCreate(Bundle savedInstanceState) {  
  25.         super.onCreate(savedInstanceState);  
  26.         setContentView(R.layout.main);  
  27.           
  28.         mdrawer = (SlidingDrawer)findViewById(R.id.slidingDrawer);  
  29.         mButton = (ImageButton)findViewById(R.id.handle);  
  30.         mText = (TextView)findViewById(R.id.textView);  
  31.         drawerlistener();  
  32.         getdata();  
  33.     }  
  34.       
  35.     private void getdata(){  
  36.         List<HashMap<String, Object>> listdata = new ArrayList<HashMap<String, Object>>();  
  37.           
  38.             for(int i=0; i<10; i++){  
  39.                 map = new HashMap<String, Object>();  
  40.                 map.put("text""ceshi");  
  41.                 listdata.add(map);  
  42.             }  
  43.     }  
  44.       
  45.     private void drawerlistener(){  
  46.         mdrawer.setOnDrawerOpenListener(new SlidingDrawer.OnDrawerOpenListener() {  
  47.               
  48.             @Override  
  49.             public void onDrawerOpened() {  
  50.                 flag = true;  
  51.                 mButton.setImageResource(R.drawable.button_down);  
  52.             }  
  53.         });  
  54.           
  55.         mdrawer.setOnDrawerCloseListener(new SlidingDrawer.OnDrawerCloseListener() {  
  56.               
  57.             @Override  
  58.             public void onDrawerClosed() {  
  59.                 flag = false;  
  60.                 mButton.setImageResource(R.drawable.button_up);  
  61.             }  
  62.         });  
  63.           
  64.         mdrawer.setOnDrawerScrollListener(new SlidingDrawer.OnDrawerScrollListener() {  
  65.               
  66.             @Override  
  67.             public void onScrollStarted() {  
  68.                 mText.setText("结束拖动");  
  69.             }  
  70.               
  71.             @Override  
  72.             public void onScrollEnded() {  
  73.                 mText.setText("开始拖动");  
  74.             }  
  75.         });  
  76.     }  
  77.       
  78. }  

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值