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的代碼,代碼中需要的圖片自己解決
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <SlidingDrawer
- android:id="@+id/slidingDrawer"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical"
- android:handle="@+id/handle"
- android:content="@+id/content">
- <ImageButton
- android:id="@+id/handle"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:src="@drawable/button_up"/>
- <LinearLayout
- android:id="@+id/content"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:background="#ffffff">
-
- <TextView android:text="ceshi"
- android:id="@+id/textView"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"/>
- </LinearLayout>
- </SlidingDrawer>
- </LinearLayout>
- package com.dapp;
-
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
-
- import android.app.Activity;
- import android.content.Context;
- import android.os.Bundle;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.BaseAdapter;
- import android.widget.ImageButton;
- import android.widget.SlidingDrawer;
- import android.widget.TextView;
-
- public class ChoutiActivity extends Activity {
- private SlidingDrawer mdrawer;
- private ImageButton mButton;
- private TextView mText;
- private boolean flag;
- private HashMap<String, Object> map;
-
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
-
- mdrawer = (SlidingDrawer)findViewById(R.id.slidingDrawer);
- mButton = (ImageButton)findViewById(R.id.handle);
- mText = (TextView)findViewById(R.id.textView);
- drawerlistener();
- getdata();
- }
-
- private void getdata(){
- List<HashMap<String, Object>> listdata = new ArrayList<HashMap<String, Object>>();
-
- for(int i=0; i<10; i++){
- map = new HashMap<String, Object>();
- map.put("text", "ceshi");
- listdata.add(map);
- }
- }
-
- private void drawerlistener(){
- mdrawer.setOnDrawerOpenListener(new SlidingDrawer.OnDrawerOpenListener() {
-
- @Override
- public void onDrawerOpened() {
- flag = true;
- mButton.setImageResource(R.drawable.button_down);
- }
- });
-
- mdrawer.setOnDrawerCloseListener(new SlidingDrawer.OnDrawerCloseListener() {
-
- @Override
- public void onDrawerClosed() {
- flag = false;
- mButton.setImageResource(R.drawable.button_up);
- }
- });
-
- mdrawer.setOnDrawerScrollListener(new SlidingDrawer.OnDrawerScrollListener() {
-
- @Override
- public void onScrollStarted() {
- mText.setText("結束拖動");
- }
-
- @Override
- public void onScrollEnded() {
- mText.setText("開始拖動");
- }
- });
- }
-
- }