• 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. }  

     

  • 相关阅读:
    jeecg接口开发及权限实现原理
    Jeecg中通过Spring_AOP+注解方式实现日志的管理
    Jeecg踩坑不完全指南
    在jeecg中如何配置多对一和多对多的关系
    一致性哈希算法
    到底什么是哈希Hash?
    如何正确实现 Java 中的 HashCode
    Hash和HashCode深入理解
    关于源码
    MySQL存储过程的创建及调用
  • 原文地址:https://www.cnblogs.com/renyuan/p/2687929.html
Copyright © 2020-2023  润新知