android hover监控鼠标移动事件
android hover 监控鼠标移动事件
分类: android移动开发 2012-02-10 18:29 1049人阅读 评论(3) 收藏 举报
android之前对于鼠标光标事件的监控非常少,4.0之后多了一个hover的组件,此组件可以监控鼠标光标在view上的变化。
代码如下:
[java] view plaincopyprint?
1. public class HoverDemoActivity extends Activity {
2. private Button btnBottom;
3. @Override
4. public void onCreate(Bundle savedInstanceState) {
5. super.onCreate(savedInstanceState);
6. setContentView(R.layout.main);
7. btnBottom = (Button) findViewById(R.id.btn_bottom);
8.
9. btnBottom.setOnHoverListener(new OnHoverListener() { 10. @Override
11. public boolean onHover(View v, MotionEvent event) { 12. int what = event.getAction();
13. switch(what){
14. case MotionEvent.ACTION_HOVER_ENTER: //鼠标进入view 15. System.out.println("bottom ACTION_HOVER_ENTER"); 16. break;
17. case MotionEvent.ACTION_HOVER_MOVE: //鼠标在view上 18. System.out.println("bottom ACTION_HOVER_MOVE"); 19. break;
20. case MotionEvent.ACTION_HOVER_EXIT: //鼠标离开view 21. System.out.println("bottom ACTION_HOVER_EXIT"); 22. break;
23. }
24. return false;
25. }
26. });
27. }
28. }
当view隐藏时,无法监控点击,触
摸和hover事件。
android hover监控鼠标移动事件
(2012-05-16 12:14:07)
转载?
分类: 技术交流 标签:
listview
hover
鼠标
杂谈
android之前对于鼠标光标事件的监控非常少,4.0之后多了一个hover的
组件,此组件可以监控鼠标光标在view上的变化。
代码如下:
public class HoverDemoActivity extends Activity {
private Button btnBottom;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnBottom = (Button) findViewById(R.id.btn_bottom);
btnBottom.setOnHoverListener(new OnHoverListener() {
@Override
public boolean onHover(View v, MotionEvent event) {
int what = event.getAction();
switch(what){
case MotionEvent.ACTION_HOVER_ENTER: //鼠标进入view
System.out.println("bottom ACTION_HOVER_ENTER");
break;
case MotionEvent.ACTION_HOVER_MOVE: //鼠标在view上
System.out.println("bottom ACTION_HOVER_MOVE");
break;
case MotionEvent.ACTION_HOVER_EXIT: //鼠标离开view
System.out.println("bottom ACTION_HOVER_EXIT");
break;
}
return false;
}
});
}
}
当view隐藏时,无法监控点击,触摸和hover事件。
以上来源于
下面做点补充:listview焦点跟随鼠标移动
在重载BaseAdapter的适配器中的getView方法中对行视图进行hover监听, 代码如下:
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
ListItemViewHolder holder = null; // 清空临时变量
if (convertView == null) {
// 若行未初始化
convertView =
layoutInflater.inflate(R.layout.radio_selection_mode_list_item, null);
// 通过flater初始化行视图
convertView.setOnHoverListener(new MyOnHoverListener());
holder = new ListItemViewHolder(); // 并将行视图的3个子视
图引用放到tag中
//......
convertView.setTag(holder);
} else {
holder = (ListItemViewHolder) convertView.getTag(); // 若
行已初始化,直接从tag属性获得子视图的引用
}
//......
return convertView;
}
class MyOnHoverListener implements OnHoverListener{
@Override
public boolean onHover(View arg0, MotionEvent event) {
// TODO Auto-generated method stub
int what = event.getAction();
switch(what){
case MotionEvent.ACTION_HOVER_ENTER: //鼠标进入
view
int pos = (int)arg0.getY() / 75;
Bundle mBundle = new Bundle();
mBundle.putInt("position", pos);
Message msg = new Message();
msg.what = FileBrowserActivity.MSG_MOUSE_MOVE;
msg.setData(mBundle);
fileBrowserActivity.activityHandler.sendMessage(msg);//可以刷新listview 设置焦点
break;
case MotionEvent.ACTION_HOVER_MOVE: //鼠标在view上
break;
case MotionEvent.ACTION_HOVER_EXIT: //鼠标离开view
break;
}
return false;
}
}
activity收到消息后作出处理:
case MSG_MOUSE_MOVE:
int pos = msg.getData().getInt("position");
browserViewHolder.fileBrowserListView.setFocusable(true);
browserViewHolder.fileBrowserListView.requestFocus();
browserViewHolder.fileBrowserListView.setSelection(pos);
break;