如何在用户停止操作一段时间后隐藏界面上的某些东东,比如遥控器按出的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个文件都是的。
下面给出下载地址:
点击我下载
- 如何在用户停止操作一段时间后隐藏界面上的某些东东,比如遥控器按出的menu,一段时间不按遥控器就让menu消失
- MYSQL连接一段时间不操作后出现异常的解决方案
- “PL/SQL在连接数据库后,一段时间不操作的话,会断开连接”的解决办法
- “PL/SQL在连接数据库后,一段时间不操作的话,会断开连接”的解决办法 .
- ASP 用一段时间后突然连接不上ACCESS数据库,提示未知错误的解决办法
- Mac在一段时间不使用后,应用会自动退出的解决方法
- Android实现定时隐藏View(一段时间无操作后隐藏)
- 关于Qt在wince上运行很卡很慢一段时间后变正常的问题
- 自定义android程序一段时间无操作后的功能
- 平板界面状态栏按下menu键显示不出,无响应
- android 界面 状态栏按下 menu键 显示不出,无响应
- 遥控器在Android2.3.4系统的移植
- 神奇的遥控器
- 神奇的遥控器
- 遥控器的革命?
- 最新款的麻将机遥控器
- ssh中,项目无响应,或运行一段时间后停止响应的解决办法
- 阿里云的小内存服务器,mysql总是运行一段时间后自动停止
- c++ 中的this指针是如何工作的?
- 函数式编程语言F#
- STL auto_ptr智能指针简单分析
- Fortran 字符串变量(STRING)
- 深入浅出之正则表达式(一)
- 如何在用户停止操作一段时间后隐藏界面上的某些东东,比如遥控器按出的menu,一段时间不按遥控器就让menu消失
- 手机SIM卡的详细介绍
- Linux设备驱动-中断处理笔记
- 频繁打开数据库连接是否影响性能的疑惑
- CLR via c# 装箱与拆箱
- 解除苹果的appleID绑定的信用卡
- Android 程序自动更新
- Android动画及图片的缩放和旋转
- 未能从程序 集'Microsoft.VisualStudio.DataDesign.SyncDesigner.DslPackage,Version=9.0.0.0,Culture=neutral