android:allowSingleTap 指示抽屉是否可以打开/通过手柄上的一个水龙头关闭。

android:animateOnClick 表示所述抽屉是否应该打开/与当用户点击手柄动画关闭。

android:bottomOffset 额外偏移的把手在SlidingDrawer的底部。
android:content 标识符表示抽屉的内容孩子。

Identifier for the child that represents the drawer's content.
android:handle 标识符表示抽屉的把手的孩子。

Identifier for the child that represents the drawer's handle.
android:orientation

Orientation of the SlidingDrawer. 取向SlidingDrawer的。
android:topOffset

Extra offset for the handle at the top of the SlidingDrawer.

额外偏移的把手在SlidingDrawer的顶部。

3 import android.content.Context;  4 import android.util.AttributeSet;  5 import android.view.View;  6 import android.widget.SlidingDrawer;  7  8 /**  9  * 使得SlidingDrawer在屏幕低端,而不会填满整个屏幕  10 */  11 public class WrapSlidingDrawer extends SlidingDrawer {  12  13 private boolean mVertical;  14 private int mTopOffset;  15  16 // 从指定的XML定义的属性集创建一个新的WrapSlidingDrawer。  17 public WrapSlidingDrawer(Context context, AttributeSet attrs, int defStyle) {  18 super(context, attrs, defStyle);  19 /**  20  * namespace 属性的命名空间来获取。  21  * attribute 属性检索。  22  * defaultValue 如果未找到该属性返回什么。  23  *  24  * ORIENTATION_VERTICAL:定向垂直。  25 */  26 int orientation = attrs.getAttributeIntValue("android", "orientation",  27  ORIENTATION_VERTICAL);  28 // "topOffset" 额外偏移的把手在SlidingDrawer的顶部。  29 mTopOffset = attrs.getAttributeIntValue("android", "topOffset", 0);  30 mVertical = (orientation == SlidingDrawer.ORIENTATION_VERTICAL);  31  }  32  33 public WrapSlidingDrawer(Context context, AttributeSet attrs) {  34 super(context, attrs);  35 int orientation = attrs.getAttributeIntValue("android", "orientation",  36  ORIENTATION_VERTICAL);  37 mTopOffset = attrs.getAttributeIntValue("android", "topOffset", 0);  38 mVertical = (orientation == SlidingDrawer.ORIENTATION_VERTICAL);  39  }  40  41 /**  42  * 测量视图和其内容,以确定所测量的宽度和所测量的高度。  43  * widthMeasureSpec 宽度测量规格。  44  * heightMeasureSpec 高度测量规格。  45 */  46  @Override  47 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {  48 int widthSpecMode = MeasureSpec.getMode(widthMeasureSpec);  49 int widthSpecSize = MeasureSpec.getSize(widthMeasureSpec);  50 int heightSpecMode = MeasureSpec.getMode(heightMeasureSpec);  51 int heightSpecSize = MeasureSpec.getSize(heightMeasureSpec);  52 // 返回抽屉的手柄。   53 final View handle = getHandle();  54 // 返回抽屉的内容。   55 final View content = getContent();  56 /**  57  * Ask one of the children of this view to measure itself, taking into  58  * account both the MeasureSpec requirements for this view and its padding.  59  * The heavy lifting is done in getChildMeasureSpec.  60  *  61  * @param child The child to measure  62  * @param parentWidthMeasureSpec The width requirements for this view  63  * @param parentHeightMeasureSpec The height requirements for this view  64 */  65  measureChild(handle, widthMeasureSpec, heightMeasureSpec);  66  67 if (mVertical) {  68 // 测量高度 - 抽屉手柄高度 - 额外偏移的把手顶部  69 int height = heightSpecSize - handle.getMeasuredHeight()  70 - mTopOffset;  71 // 内容尺寸  72 // public static int makeMeasureSpec (int size, int mode)  73 // Creates a measure specification based on the supplied size and mode.  74 // size the size of the measure specification  75 // mode the mode of the measure specification  76  content.measure(widthMeasureSpec,  77  MeasureSpec.makeMeasureSpec(height, heightSpecMode));  78 //  79 heightSpecSize = handle.getMeasuredHeight() + mTopOffset  80 + content.getMeasuredHeight();  81 //  82 widthSpecSize = content.getMeasuredWidth();  83 //  84 if (handle.getMeasuredWidth() > widthSpecSize)  85 widthSpecSize = handle.getMeasuredWidth();  86 } else {  87 int width = widthSpecSize - handle.getMeasuredWidth() - mTopOffset;  88  getContent().measure(  89  MeasureSpec.makeMeasureSpec(width, widthSpecMode),  90  heightMeasureSpec);  91 widthSpecSize = handle.getMeasuredWidth() + mTopOffset  92 + content.getMeasuredWidth();  93 heightSpecSize = content.getMeasuredHeight();  94 if (handle.getMeasuredHeight() > heightSpecSize)  95 heightSpecSize = handle.getMeasuredHeight();  96  }  97 // 此方法必须由onMeasure(int,int)被调用储存的测量宽度和高度测量。  98  setMeasuredDimension(widthSpecSize, heightSpecSize);  99  } 100 }

 1 <?xml version="1.0" encoding="utf-8"?>  2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  3  android:layout_width="fill_parent"  4  android:layout_height="fill_parent" >  5  6 <TextView  7 android:id="@+id/text_view"  8  android:layout_width="fill_parent"  9  android:layout_height="wrap_content" 10  android:layout_marginTop="10dip" 11  android:gravity="center" 12  android:text="AAAAAAAAAAAAAA" 13  android:textSize="10pt" /> 14 15 <com.cn.daming.WrapSlidingDrawer 16 android:id="@+id/sliding_drawer" 17  android:layout_width="fill_parent" 18  android:layout_height="wrap_content" 19  android:content="@+id/mycontent" 20  android:handle="@+id/layout1" 21  android:layout_alignParentBottom="true" 22  android:orientation="vertical" > 23 24 <LinearLayout 25 android:id="@id/layout1" 26  android:layout_width="wrap_content" 27  android:layout_height="wrap_content" 28  android:background="#00000000" 29  android:gravity="center" > 30 31 <ImageView 32 android:id="@+id/my_image" 33  android:layout_width="wrap_content" 34  android:layout_height="wrap_content" 35  android:src="@drawable/up1" /> 36 </LinearLayout> 37 38 <GridView 39 android:id="@id/mycontent" 40  android:layout_width="wrap_content" 41  android:layout_height="wrap_content" 42  android:background="#ff000000" 43  android:gravity="center" 44  android:numColumns="3" 45  android:paddingTop="20dip" /> 46 </com.cn.daming.WrapSlidingDrawer> 47 48 </RelativeLayout>

  3 import android.app.Activity;  4 import android.content.res.Configuration;  5 import android.os.Bundle;  6 import android.view.View;  7 import android.widget.GridView;  8 import android.widget.ImageView;  9 import android.widget.SlidingDrawer; 10 import android.widget.TextView; 11 12 public class SlidingDrawerMainActivity extends Activity { 13 14 private GridView gridView; 15 private SlidingDrawer slidingDrawer; 16 private ImageView imageView; 17 private TextView textview; 18 private int[] icons = { R.drawable.title1, R.drawable.title2, 19  R.drawable.title3, R.drawable.title4, R.drawable.title5, 20  R.drawable.title6 }; 21 22 private String[] items = { "Phone", "Message", "AddImage", "Music", 23 "Telephone", "SMS" }; 24 25  @Override 26 public void onCreate(Bundle savedInstanceState) { 27 super.onCreate(savedInstanceState); 28 29  setContentView(R.layout.main); 30 31 gridView = (GridView) findViewById(R.id.mycontent); 32 slidingDrawer = (SlidingDrawer) findViewById(R.id.sliding_drawer); 33 imageView = (ImageView) findViewById(R.id.my_image); 34 textview = (TextView) findViewById(R.id.text_view); 35 MyGridViewAdapter adapter = new MyGridViewAdapter(this, items, icons); 36  gridView.setAdapter(adapter); 37 38  slidingDrawer 39 .setOnDrawerOpenListener(new SlidingDrawer.OnDrawerOpenListener() { 40 41 public void onDrawerOpened() { 42  textview.setVisibility(View.GONE); 43  imageView.setImageResource(R.drawable.down1); 44  } 45  }); 46  slidingDrawer 47 .setOnDrawerCloseListener(new SlidingDrawer.OnDrawerCloseListener() { 48 49 public void onDrawerClosed() { 50  textview.setVisibility(View.VISIBLE); 51  imageView.setImageResource(R.drawable.up1); 52  } 53  }); 54  } 55 56  @Override 57 public void onConfigurationChanged(Configuration newConfig) { 58 super.onConfigurationChanged(newConfig); 59  } 60 }

完整代码下载:http://pan.baidu.com/s/1sjsdqTv

更多相关文章

  1. Android弹出式提示框 PopupWindow
  2. android 抽屉类slidingdrawer源码解析及运行调试
  3. Android之PopupWindow弹出对话框 Android之PopupWindow弹出对话
  4. Android(安卓)matrix偏移(平移),旋转,缩放,倾斜的原理
  5. 实现Launcher的抽屉效果
  6. Android(安卓)View 相关源码分析之四 LinearLayout源码分析
  7. SlidingDrawer
  8. Android(安卓)-- 隐藏式抽屉(SlidingDrawer)
  9. Android(安卓)自定义对话框(Dialog)设置显示大小方向

随机推荐

  1. [Android] AIDL的使用情况和实例介绍
  2. Android中使用mvvm
  3. Android:Handler事件处理机制
  4. Android设置Activity(界面)为全屏显示的两
  5. android 音效处理(1)
  6. Android(安卓)SAX和DOM解析XML文件
  7. git下载Android(安卓)kernel 源码并进行
  8. Android(安卓)Context 使用时注意内存泄
  9. Android(安卓)Binder 简单实例
  10. android 数据话持久化——SQLite