在android系统中,SlidingDrawer控件是默认的自下向上的滑动,那么如何实现一个自上向下的滑动呢?
首先先分析一下SlidingDrawer控件中都有那些元素:一个Handle,可以看做是一个按钮,点击按钮可以实现隐藏的View;一个View,可以看做是一个ListView或者GridView等等自己定义的View(我是这样理解的)。
在SlidingDrawer滑动的过程中,就是覆盖底层的主界面,对SlidingDrawer中的View部分进行缩放的一个过程。
效果图:
下面,我们先创建一个XMl文件,对主界面进行布局
- <?xml version="1.0" encoding="utf-8"?>
- <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical"
- android:gravity="center"
- >
- <TextView
- android:id="@+id/text"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="测试"
- android:textSize="20px"
- />
- </LinearLayout>
- <LinearLayout
- android:id="@+id/container"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical" >
- <GridView
- android:id="@+id/gridview"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:columnWidth="50dip"
- android:gravity="center"
- android:horizontalSpacing="10dip"
- android:numColumns="auto_fit"
- android:verticalSpacing="10dp"
- />
- </LinearLayout>
- </FrameLayout>
我们用帧布局对主界面进行控制,嵌套两个线性布局,第一个线性布局为主界面的显示部分,第二个线性布局控制SlidingDrawer中的View,并用GridView显示
接下来,创建Activity,对界面进行初始化
- import java.util.List;
- import my.panel.slidingdrawer.R;
- import android.app.Activity;
- import android.content.Intent;
- import android.content.pm.ResolveInfo;
- import android.os.Bundle;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.BaseAdapter;
- import android.widget.GridView;
- import android.widget.ImageView;
- import android.widget.LinearLayout;
- import android.widget.LinearLayout.LayoutParams;
- import android.widget.TextView;
- public class UpToDownActivity extends Activity {
- public GroupView groupView;
- public LinearLayout container;
- public GridView gridview;
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- this.setTitle("向下拉动的抽屉效果");
- TextView textView = (TextView) findViewById(R.id.text);
- textView.setText("盼望着,盼望着,东风来了,春天的脚步近了。 一切都像刚睡醒的样子,欣欣然张开了眼。山朗润起来了,水长起来了,太阳的脸红起来了。 小草偷偷地从土里钻出来,嫩嫩的,绿绿的。园子里,田野里,瞧去,一大片一大片满是的。坐着,躺着,打两个滚,踢几脚球,赛几趟跑,捉几回迷藏。风轻悄悄的,草绵软软的。");
- gridview = (GridView) findViewById(R.id.gridview);
- container=(LinearLayout)findViewById(R.id.container);
- groupView=new GroupView(this,gridview,LayoutParams.MATCH_PARENT,800);
- //加入groupView控件
- container.addView(groupView);
- //往GridView填充测试数据
- loadApps();
- gridview.setAdapter(new GridAdapter());
- }
- //ApplicationInfo与ResolveInfo比较:
- //前者能够得到Icon、Label、meta-data、description
- //后者只能得到Icon、Label
- private List<ResolveInfo> apps;
- //加载手机中的APP
- 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 p_w_picpathView = null;
- if (convertView == null) {
- p_w_picpathView = new ImageView(UpToDownActivity.this);
- //设置图片显示方式
- p_w_picpathView.setScaleType(ImageView.ScaleType.FIT_CENTER);
- p_w_picpathView.setLayoutParams(new GridView.LayoutParams(50, 50));
- } else {
- p_w_picpathView = (ImageView) convertView;
- }
- ResolveInfo ri = apps.get(position);
- p_w_picpathView.setImageDrawable(ri.activityInfo
- .loadIcon(getPackageManager()));
- return p_w_picpathView;
- }
- }
- }
转载于:https://blog.51cto.com/hanxy86/820983