SlidingDrawer抽屉效果想必大家都见过了,本文就是阐述了关于SlidingDrawer的抽屉效果讲解:
1.简介:
SlidingDrawer隐藏屏外的内容,并允许用户通过handle以显示隐藏内容。它可以垂直或水平滑动,它有俩个View组成,其一是可以拖动的handle,其二是隐藏内容的View.它里面的控件必须设置布局,在布局文件中必须指定handle和content.
案例:
<SlidingDrawer android:id="@+id/sliding" android:layout_width="match_parent" android:layout_height="match_parent" android:content="@+id/allApps" android:handle="@+id/imageViewIcon" android:orientation="vertical" > <Button android:id="@+id/imageViewIcon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="本地" android:textSize="18dp" android:background="@drawable/btn_local" /> <GridView android:id="@+id/allApps" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/file_list_bg" android:columnWidth="60dp" android:gravity="center" android:horizontalSpacing="10dp" android:numColumns="auto_fit" android:padding="10dp" android:stretchMode="columnWidth" android:verticalSpacing="10dp" /> </SlidingDrawer>
2.重要属性
android:allowSingleTap:指示是否可以通过handle打开或关闭
android:animateOnClick:指示是否当使用者按下手柄打开/关闭时是否该有一个动画。
android:content:隐藏的内容
android:handle:handle(手柄)
3.重要方法
animateClose():关闭时实现动画。
close():即时关闭
getContent():获取内容
isMoving():指示SlidingDrawer是否在移动。
isOpened():指示SlidingDrawer是否已全部打开
lock():屏蔽触摸事件。
setOnDrawerCloseListener(SlidingDrawer.OnDrawerCloseListener onDrawerCloseListener):SlidingDrawer关闭时调用
unlock():解除屏蔽触摸事件。
toggle():切换打开和关闭的抽屉SlidingDrawer。
重要代码查看
1.
package cn.com.karl.view; import cn.com.karl.reader.R; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.util.AttributeSet; import android.widget.GridView; public class MyGridView extends GridView { private Bitmap background; public MyGridView(Context context, AttributeSet attrs) { super(context, attrs); background = BitmapFactory.decodeResource(getResources(), R.drawable.bookshelf_layer_center); } @Override protected void dispatchDraw(Canvas canvas) { int count = getChildCount(); int top = count > 0 ? getChildAt(0).getTop() : 0; int backgroundWidth = background.getWidth(); int backgroundHeight = background.getHeight()+2; int width = getWidth(); int height = getHeight(); for (int y = top; y < height; y += backgroundHeight) { for (int x = 0; x < width; x += backgroundWidth) { canvas.drawBitmap(background, x, y, null); } } super.dispatchDraw(canvas); } }
package cn.com.karl.reader; import java.io.File; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.ResolveInfo; import android.os.Bundle; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.GridView; import android.widget.ImageView; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.SlidingDrawer; import android.widget.TextView; import android.widget.Toast; import android.widget.AdapterView.OnItemClickListener; public class BookShelfActivity extends Activity { private GridView bookShelf; private int[] data = { R.drawable.cover_txt,R.drawable.cover_txt,R.drawable.cover_txt,R.drawable.cover_txt,R.drawable.cover_txt, R.drawable.cover_txt,R.drawable.cover_txt,R.drawable.cover_txt,R.drawable.cover_txt,R.drawable.cover_txt, R.drawable.cover_txt,R.drawable.cover_txt,R.drawable.cover_txt,R.drawable.cover_txt, R.drawable.cover_txt,R.drawable.cover_txt,R.drawable.cover_txt,R.drawable.cover_txt, R.drawable.cover_txt,R.drawable.cover_txt,R.drawable.cover_txt,R.drawable.cover_txt, R.drawable.cover_txt,R.drawable.cover_txt,R.drawable.cover_txt,R.drawable.cover_txt, R.drawable.cover_txt,R.drawable.cover_txt,R.drawable.cover_txt,R.drawable.cover_txt, R.drawable.cover_txt,R.drawable.cover_txt,R.drawable.cover_txt,R.drawable.cover_txt }; private String[] name={ "天龙八部","搜神记","水浒传","黑道悲情" }; private GridView gv; private SlidingDrawer sd; private Button iv; private List<ResolveInfo> apps; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.main); bookShelf = (GridView) findViewById(R.id.bookShelf); ShlefAdapter adapter=new ShlefAdapter(); bookShelf.setAdapter(adapter); bookShelf.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub if(arg2>=data.length){ }else{ Toast.makeText(getApplicationContext(), ""+arg2, Toast.LENGTH_SHORT).show(); } } }); loadApps(); gv = (GridView) findViewById(R.id.allApps); sd = (SlidingDrawer) findViewById(R.id.sliding); iv = (Button) findViewById(R.id.imageViewIcon); gv.setAdapter(new GridAdapter()); sd.setOnDrawerOpenListener(new SlidingDrawer.OnDrawerOpenListener()// 开抽屉 { @Override public void onDrawerOpened() { iv.setText("返回"); iv.setBackgroundResource(R.drawable.btn_local);// 响应开抽屉事件 // ,把图片设为向下的 } }); sd.setOnDrawerCloseListener(new SlidingDrawer.OnDrawerCloseListener() { @Override public void onDrawerClosed() { iv.setText("本地"); iv.setBackgroundResource(R.drawable.btn_local);// 响应关抽屉事件 } }); } class ShlefAdapter extends BaseAdapter{ @Override public int getCount() { // TODO Auto-generated method stub return data.length+5; } @Override public Object getItem(int arg0) { // TODO Auto-generated method stub return arg0; } @Override public long getItemId(int arg0) { // TODO Auto-generated method stub return arg0; } @Override public View getView(int position, View contentView, ViewGroup arg2) { // TODO Auto-generated method stub contentView=LayoutInflater.from(getApplicationContext()).inflate(R.layout.item1, null); TextView view=(TextView) contentView.findViewById(R.id.imageView1); if(data.length>position){ if(position<name.length){ view.setText(name[position]); } view.setBackgroundResource(data[position]); }else{ view.setBackgroundResource(data[0]); view.setClickable(false); view.setVisibility(View.INVISIBLE); } return contentView; } } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub if (keyCode == KeyEvent.KEYCODE_BACK) { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage("你确定退出吗?") .setCancelable(false) .setPositiveButton("确定", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { finish(); } }) .setNegativeButton("返回", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.cancel(); } }); AlertDialog alert = builder.create(); alert.show(); return true; } return super.onKeyDown(keyCode, event); } private void loadApps() { Intent intent = new Intent(Intent.ACTION_MAIN, null); intent.addCategory(Intent.CATEGORY_LAUNCHER); apps = getPackageManager().queryIntentActivities(intent, 0); } public class GridAdapter extends BaseAdapter { public GridAdapter() { } public int getCount() { // TODO Auto-generated method stub return apps.size(); } public Object getItem(int position) { // TODO Auto-generated method stub return apps.get(position); } public long getItemId(int position) { // TODO Auto-generated method stub return position; } public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub ImageView imageView = null; if (convertView == null) { imageView = new ImageView(BookShelfActivity.this); imageView.setScaleType(ImageView.ScaleType.FIT_CENTER); imageView.setLayoutParams(new GridView.LayoutParams(50, 50)); } else { imageView = (ImageView) convertView; } ResolveInfo ri = apps.get(position); imageView.setImageDrawable(ri.activityInfo .loadIcon(getPackageManager())); return imageView; } } }
http://blog.csdn.net/hellogv/article/details/6011934
不错的博客
源码下载
下载