如何在用户停止操作一段时间后隐藏界面上的某些东东,比如遥控器按出的menu,一段时间不按遥控器就让menu消失

来源:互联网 发布:大班幼儿美工作品图片 编辑:程序博客网 时间:2024/05/21 11:18
以前同事教我写过一个,后来在想的时候就想不起来了,脑袋不好使,逻辑思维又不强,像我这种只能把学到的都记下来,以后要用的时候在去找。

  好了,说正题,遇到过这方面的问题。比如遥控器上面,我按menu键会弹出菜单,我在按menu键的时候菜单会消失,或者停止操作一段时间后菜单消失,又或者

遇到这种情况,一个Gallery上面,我想让选中某一项时,加载某些信息,或者执行某些操作,但我又想连续操作几次后才加载显示的信息,也就是说我可以缓慢滑动一

项,这时会加载,也可以快速滑动,滑动完后才加载。

  下面说说用sendMessageDelay完成这种操作。

  布局文件如下:

  

 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     android:gravity="center"> 7     <ListView 8         android:id="@+id/mylist" 9         android:layout_width="match_parent"10         android:layout_height="0dip"11         android:layout_weight="1"12         android:visibility="gone"/> 13     <TextView14         android:text="@string/hint"15         android:layout_width="match_parent"16         android:layout_height="wrap_content"17         android:textSize="24sp"18         android:gravity="center"/>    19 </LinearLayout>

  首先我们在布局中放一个ListView,Listview的下面放一个TextView,而ListView把剩下的空间全部充满,ListView刚开始的时候是gone掉的。TextView上面

主要显示的是一些提示的操作。

  首先我们要处理按键操作,比如说我们在按“0”键的时候,如果ListView是显示的,那么我们把它gone掉,如果它是gone的,我们把它Visible出来,我们先写

一个方法来判断ListView是显示还是隐藏的,如下所示:

  

 1 private boolean isVisible(ListView listView) { 2         int visibile = listView.getVisibility(); 3         if(View.VISIBLE == visibile) { 4             return true; 5         } else if(View.GONE == visibile) { 6             return false; 7         } else { 8             return false; 9         }10     }

  如果ListView是visible的,我们返回为true,如果是gone的或者invisible什么其他的情况,我们返回为false。

  好了,我们要开始对按键进行操作,我们重载Activity中的dispatchKey方法,在里面处理按键“0”和按键“上/下”的情况,如果ListView是Visible的,我们只

需要将ListView gone掉就可以了,如果ListView是gone掉的,我们就需要将它显示出来,同时要将ListView设上Adapter,如果我们按“上/下”键,在按键的时候

我们需要延迟2秒发送一个消息,这个消失是通知ListView gone掉的,在这之前我们需要将前一个消息remove掉,不然我们还在操作的时候ListView就会消失,我

们一直按,没有到2秒,它会把之前的那个消失remove掉,然后发新的消息,等我们不在操作了,最后的那个消息就发送成功了,ListView就会被gone掉。

  我们看一下dispatchKey方法里面是怎么处理的:

  

 1 public boolean dispatchKeyEvent (KeyEvent event) { 2         int keyCode = event.getKeyCode(); 3         switch (keyCode) { 4             case KeyEvent.KEYCODE_0: 5                 if(event.getAction() == KeyEvent.ACTION_UP) { 6                     if(isVisible(mListView)) { 7                         mListView.setVisibility(View.GONE); 8                     } else { 9                         mListView.setVisibility(View.VISIBLE);10                         setListAdapter(mThumbs);11                         mListView.requestFocus();12                         mListView.setSelection(0);13                     }14                 }15                 return true;16             17             case KeyEvent.KEYCODE_DPAD_UP:18             case KeyEvent.KEYCODE_DPAD_DOWN:19                 mHandler.removeMessages(msgKey1);20                 mHandler.sendEmptyMessageDelayed(msgKey1, 2000);21                 break;22                 23             default:24                 break;25         }26         return super.dispatchKeyEvent(event);27     }

  设置Adapter的方法:

  

1 private void setListAdapter (String[] mThumbs2) {2         mAdapter = new ListViewAdapter(this, mThumbs2);3         mListView.setAdapter(mAdapter);4     }

 Adapter单独写出来了一个类:

  

 1 package com.test.handler; 2  3 import android.content.Context; 4 import android.view.Gravity; 5 import android.view.View; 6 import android.view.ViewGroup; 7 import android.view.ViewGroup.LayoutParams; 8 import android.widget.BaseAdapter; 9 import android.widget.ListView;10 import android.widget.TextView;11 12 public class ListViewAdapter extends BaseAdapter {13     14     private Context mContext;15     private String[] data;16     17     public ListViewAdapter (Context context, String[] data) {18         this.mContext = context;19         this.data = data;20     }21     22     @Override23     public int getCount () {24         return data.length;25     }26     27     @Override28     public Object getItem (int position) {29         return position;30     }31     32     @Override33     public long getItemId (int position) {34         return position;35     }36     37     @Override38     public View getView (int position, View convertView, ViewGroup parent) {39         TextView tv;40         if(convertView == null) {41             tv = new TextView(mContext);42             tv.setLayoutParams(new ListView.LayoutParams(LayoutParams.MATCH_PARENT, 50, Gravity.CENTER));43         } else {44             tv = (TextView)convertView;45         }46         tv.setTextSize(30);47         tv.setGravity(Gravity.CENTER);48         tv.setText(data[position]);49         return tv;50     }51 }

  传入Adapter的参数的值:

  

 1 private String[] mThumbs = { 2         "CCTV-1", 3         "CCTV-2", 4         "CCTV-5", 5         "CCTV-6", 6         "CCTV-7", 7         "CCTV-10", 8         "CCTV-11", 9         "湖南卫视",10         "湖北卫视",11         "凤凰卫视",12         "江西卫视",13         "上海卫视",14         "辽宁卫视",15         "长春卫视",16         "北京卫视"17 };

 Handler中处理将ListView消失掉:

  

 1 private Handler mHandler = new Handler() { 2        3         public void handleMessage(android.os.Message msg) { 4             switch (msg.what) { 5                 case msgKey1: 6                     mListView.setVisibility(View.GONE); 7                     break; 8                  9                 default:10                     break;11             }12         };13     };

  完整的Activity如下所示:

  

  1 package com.test.handler;  2   3 import android.app.Activity;  4 import android.os.Bundle;  5 import android.os.Handler;  6 import android.view.KeyEvent;  7 import android.view.View;  8 import android.widget.ListView;  9  10 import com.test.R; 11  12 public class HandlerActivity extends Activity { 13   14     private ListView mListView; 15     private ListViewAdapter mAdapter; 16     private static final int msgKey1 = 1; 17      18     private Handler mHandler = new Handler() { 19        20         public void handleMessage(android.os.Message msg) { 21             switch (msg.what) { 22                 case msgKey1: 23                     mListView.setVisibility(View.GONE); 24                     break; 25                  26                 default: 27                     break; 28             } 29         }; 30     }; 31      32     @Override 33     protected void onCreate (Bundle savedInstanceState) { 34         super.onCreate(savedInstanceState); 35         setContentView(R.layout.handler); 36         mListView = (ListView) findViewById(R.id.mylist); 37     } 38      39     private boolean isVisible(ListView listView) { 40         int visibile = listView.getVisibility(); 41         if(View.VISIBLE == visibile) { 42             return true; 43         } else if(View.GONE == visibile) { 44             return false; 45         } else { 46             return false; 47         } 48     } 49      50     @Override 51     public boolean dispatchKeyEvent (KeyEvent event) { 52         int keyCode = event.getKeyCode(); 53         switch (keyCode) { 54             case KeyEvent.KEYCODE_0: 55                 if(event.getAction() == KeyEvent.ACTION_UP) { 56                     if(isVisible(mListView)) { 57                         mListView.setVisibility(View.GONE); 58                     } else { 59                         mListView.setVisibility(View.VISIBLE); 60                         setListAdapter(mThumbs); 61                         mListView.requestFocus(); 62                         mListView.setSelection(0); 63                     } 64                 } 65                 return true; 66              67             case KeyEvent.KEYCODE_DPAD_UP: 68             case KeyEvent.KEYCODE_DPAD_DOWN: 69                 mHandler.removeMessages(msgKey1); 70                 mHandler.sendEmptyMessageDelayed(msgKey1, 2000); 71                 break; 72                  73             default: 74                 break; 75         } 76         return super.dispatchKeyEvent(event); 77     } 78      79     private void setListAdapter (String[] mThumbs2) { 80         mAdapter = new ListViewAdapter(this, mThumbs2); 81         mListView.setAdapter(mAdapter); 82     } 83  84     private String[] mThumbs = { 85         "CCTV-1", 86         "CCTV-2", 87         "CCTV-5", 88         "CCTV-6", 89         "CCTV-7", 90         "CCTV-10", 91         "CCTV-11", 92         "湖南卫视", 93         "湖北卫视", 94         "凤凰卫视", 95         "江西卫视", 96         "上海卫视", 97         "辽宁卫视", 98         "长春卫视", 99         "北京卫视"100 };101 }

  Adapter上面已经发了。

  下面我们来看一下运行的效果吧。

  因为是动态的,需要操作才能知道效果,我这里就截两张图吧。

  一张是ListView消失的时候:

  

  还有一张是ListView显示的时候:

  

  代码我还是发上来吧,包里面很乱,都是写的测试程序,可以找到这个程序,在com.test.handler包里面,2个文件都是的。

  下面给出下载地址:

  点击我下载

原创粉丝点击