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;
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;
 
arrow
arrow
    全站熱搜

    戮克 發表在 痞客邦 留言(0) 人氣()