一、 android处理鼠标滚轮事件,并不是如下的函数:
1) public boolean onKeyDown(int keyCode, KeyEvent event)
2) public boolean dispatchKeyEvent(KeyEvent event)
3) public boolean onTouchEvent(MotionEvent event)
而是如下的函数
publicboolean onGenericMotionEvent(MotionEvent event);
所有View和Activity都可重写该函数,来自己处理滚轮事件。
网上很多人说用重写dispatchTouchEvent和onTouchEvent方法可以实现禁止滚动的功能,我测试了下,都是不行的,只有重写onGenericMotionEvent方法可以。
具体代码如下:
import android.annotation.SuppressLint;
import android.content.Context;
import android.util.Log;
import android.view.MotionEvent;
import android.widget.GridView;
public class MyGridView extends GridView {
private static final String TAG = "FreeRDP.SessionActivity";
public MyGridView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
// 通过重新dispatchTouchEvent方法来禁止滑动
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
// TODO Auto-generated method stub
Log.v(TAG, "dispatchTouchEvent....4444444444........." + ev.getAction());
if (ev.getAction() == MotionEvent.ACTION_MOVE) {
return true;// 禁止Gridview进行滑动
}
return super.dispatchTouchEvent(ev);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// 重写的onTouchEvent回调方法
Log.v(TAG, "dispatchTouchEvent...5555........" + event.getAction());
switch (event.getAction()) {
// 按下
case MotionEvent.ACTION_DOWN:
return super.onTouchEvent(event);
// 滑动
case MotionEvent.ACTION_MOVE:
break;
// 离开
case MotionEvent.ACTION_UP:
return super.onTouchEvent(event);
}
// 注意:返回值是false
return false;
}
@SuppressLint({ "NewApi", "NewApi" })
@Override
public boolean onGenericMotionEvent(MotionEvent event) {
// 重写的onTouchEvent回调方法
switch (event.getAction()) {
// 按下
case MotionEvent.ACTION_DOWN:
return super.onGenericMotionEvent(event);
// 滑动
case MotionEvent.ACTION_MOVE:
break;
// 离开
case MotionEvent.ACTION_UP:
return super.onGenericMotionEvent(event);
}
// 注意:返回值是false
return false;
}
}
二、 禁止滚动条显示
有二种方法禁止滚动条显示:
1、xml添加android:scrollbars="none"属性。
2、代码实现:gridView.setVerticalScrollBarEnabled(false);