您的位置:首页 > 移动开发 > Android开发

android hover监控鼠标移动事件

2013-07-09 12:24 726 查看

 

 

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事件。

以上来源于http://blog.csdn.net/zhudaozhuan/article/details/7249538

下面做点补充: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; 
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: