当前位置: 编程技术>移动开发
本页文章导读:
▪onTouchEvent 中onTouch的返回值的意思 onTouchEvent 中onTouch的返回值的意义
今天想捕获Gallery的Touch事件做自己想要的处理,但你添加完setOnTouchListener监听完之后eclipse自动会生成一个onTouch方法,就可以在这里面做你想要做的处理.........
▪ 简略的实现listView中item多个控件以及点击事件 简单的实现listView中item多个控件以及点击事件
public class ProductSearch extends ListActivity {
private static class ProductSearchAdapter extends BaseAdapter {
private LayoutInflater mInflater;
private Bitmap mIcon1;.........
▪ listview onClick longClick onTouch三个事件的处置 listview onClick longClick onTouch三个事件的处理
int lastX, curX;
private int totalMove = 0;
private boolean firstDown = true;//开关
int duration = 150;
OnTouchListener listViewOnTouchListener = new OnTouchListener() {
@Override
pu.........
[1]onTouchEvent 中onTouch的返回值的意思
来源: 互联网 发布时间: 2014-02-18
onTouchEvent 中onTouch的返回值的意义
今天想捕获Gallery的Touch事件做自己想要的处理,但你添加完setOnTouchListener监听完之后eclipse自动会生成一个onTouch方法,就可以在这里面做你想要做的处理了,若你小心地看它会增加return false这行。我在处理完Event.ACTION_MOVE时将其改为return true。当我运行我的程序的时候发现Gallery不能左右滚动了。我就觉得很纳闷了,怎么不能滚动了呢?然后一个朋友提示我应该return false.我改完运行后,果真可以滚动了,并且我在move的时候也实现了我的处理。当时我就在想:return false和return true有何区别呢?
下面就是我在别的文章学习总结来的结论:
1,return false说明你还没消费onTouch事件,在执行完你onTouch里面的代码之后,onTouch事件并没有结束。就是会自动地执行Gallery这个view里onTouch代码(这个为默认).所以这就是为什么没增加你的处理的时候就只自动地调用Gallery的onTouch,若你在onTouch里面增加你的代码并且return false就会执行你的处理和默认的处理。
2,return true说明你已经消费完了onTouch事件,在执行完你的onTouch里面的代码之后,这个onTouch事件就结束了。也就是说不会再调用默认的onTouch事件了。在onTouch里面有很多种的处理比如move,down,up....,若你在move里面return false,那么接着的fling,up等后面的事件也不会处理的。
Thanks!
Thanks!
不用谢,多多关注,嘿嘿。
这里有个关于垂直滚动的方法汇总:android垂直自动滚动
今天想捕获Gallery的Touch事件做自己想要的处理,但你添加完setOnTouchListener监听完之后eclipse自动会生成一个onTouch方法,就可以在这里面做你想要做的处理了,若你小心地看它会增加return false这行。我在处理完Event.ACTION_MOVE时将其改为return true。当我运行我的程序的时候发现Gallery不能左右滚动了。我就觉得很纳闷了,怎么不能滚动了呢?然后一个朋友提示我应该return false.我改完运行后,果真可以滚动了,并且我在move的时候也实现了我的处理。当时我就在想:return false和return true有何区别呢?
下面就是我在别的文章学习总结来的结论:
1,return false说明你还没消费onTouch事件,在执行完你onTouch里面的代码之后,onTouch事件并没有结束。就是会自动地执行Gallery这个view里onTouch代码(这个为默认).所以这就是为什么没增加你的处理的时候就只自动地调用Gallery的onTouch,若你在onTouch里面增加你的代码并且return false就会执行你的处理和默认的处理。
2,return true说明你已经消费完了onTouch事件,在执行完你的onTouch里面的代码之后,这个onTouch事件就结束了。也就是说不会再调用默认的onTouch事件了。在onTouch里面有很多种的处理比如move,down,up....,若你在move里面return false,那么接着的fling,up等后面的事件也不会处理的。
mGallery.setOnTouchListener(new OnTouchListener(){
//@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
System.out.println("Gallery onTouch");
if(event.getAction()==MotionEvent.ACTION_MOVE){
mDismiss.removeMessages(1);
System.out.println("ACTION_MOVE ");
}else if(event.getAction()==MotionEvent.ACTION_UP){
mDismiss.sendEmptyMessageDelayed(1,10000);
System.out.println("ACTION_UP ");
}
return false;
}
});
1 楼
fengzhonghun
2011-09-06
写反了吧!
2 楼
lenomon
2012-04-02
这篇详细,希望有帮助,Android事件传递机制【Touch事件】
3 楼
追求幸福
2012-04-05
lenomon 写道
这篇详细,希望有帮助,Android事件传递机制【Touch事件】
Thanks!
4 楼
lenomon
2012-04-07
追求幸福 写道
lenomon 写道
这篇详细,希望有帮助,Android事件传递机制【Touch事件】
Thanks!
不用谢,多多关注,嘿嘿。
这里有个关于垂直滚动的方法汇总:android垂直自动滚动
[2] 简略的实现listView中item多个控件以及点击事件
来源: 互联网 发布时间: 2014-02-18
简单的实现listView中item多个控件以及点击事件
public class ProductSearch extends ListActivity {
private static class ProductSearchAdapter extends BaseAdapter {
private LayoutInflater mInflater;
private Bitmap mIcon1;
private Bitmap mIcon2;
public ProductSearchAdapter(Context context) {
mInflater = LayoutInflater.from(context);
// Icons bound to the rows.
mIcon1 = BitmapFactory.decodeResource(context.getResources(),
R.drawable.icon48x48_1);
mIcon2 = BitmapFactory.decodeResource(context.getResources(),
R.drawable.icon48x48_2);
}
@Override
public int getCount() {
return DATA.length;
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView,
ViewGroup parent) {
ViewHolder holder;
Button btn=null;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.productsearch, null);
// Creates a ViewHolder and store references to the two children
// views
// we want to bind data to.
holder = new ViewHolder();
holder.text = (TextView) convertView.findViewById(R.id.text);
holder.icon = (ImageView) convertView.findViewById(R.id.icon);
btn=(Button)convertView.findViewById(R.id.prdsrcbutton);
convertView.setTag(holder);
} else {
// Get the ViewHolder back to get fast access to the TextView
// and the ImageView.
holder = (ViewHolder) convertView.getTag();
}
// Bind the data efficiently with the holder.
holder.text.setText(DATA[position]);
holder.icon.setImageBitmap((position & 1) == 1 ? mIcon1 : mIcon2);
holder.icon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.i("image", " u clicked on icon Position" + position);
}
});
holder.text.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.i("Text", " u clicked on text Position" + position);
}
});
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.i("Button","U clicked on button");
}
});
return convertView;
}
static class ViewHolder {
TextView text;
ImageView icon;
}
private static final String[] DATA = { "Abbaye de Belloc",
"Abbaye du Mont des Cats" };
}
ListView product_search_list;
Button srch_btn;
EditText srch_text;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setListAdapter(new ProductSearchAdapter(this));
// setContentView(R.layout.productsearch);
// getListView().setEmptyView(findViewById(R.id.text));
// srch_text = (EditText)findViewById(R.id.prdsearchtb);
// srch_btn = (Button) findViewById(R.id.prdsearchtb);
// srch_btn.setOnClickListener(new View.OnClickListener() {
//
// @Override
// public void onClick(View v) {
// callProductSearchAdapter();
//
// }
// });
}
void callProductSearchAdapter() {
setListAdapter(new ProductSearchAdapter(this));
}
private void createDialog(String title, String text, final Intent i) {
if (i == null) {
AlertDialog ad = new AlertDialog.Builder(this).setIcon(
R.drawable.alert_dialog_icon).setPositiveButton("Ok", null)
.setTitle(title).setMessage(text).create();
ad.show();
}
}
}
[3] listview onClick longClick onTouch三个事件的处置
来源: 互联网 发布时间: 2014-02-18
listview onClick longClick onTouch三个事件的处理
int lastX, curX;
private int totalMove = 0;
private boolean firstDown = true;//开关
int duration = 150;
OnTouchListener listViewOnTouchListener = new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
lastX = (int)event.getX();
totalMove = 0;
firstDown = false;
return false;
}
case MotionEvent.ACTION_MOVE:{
if (firstDown) {
curX = (int) event.getX();
totalMove = 0;
firstDown = false;
}
curX = (int) event.getX();
int delatX = curX - lastX;
//if (delatX > 0) {
totalMove += delatX;
lastX = curX;
//}
return false;
}
case MotionEvent.ACTION_UP:{
boolean result = false;
if(totalMove > 20 ){
//
Log.e("right","right");
totalMove = 0;
//things you shouold do here
result = true;
}
if(totalMove < 0 && Math.abs(totalMove) > 20){
Log.e("left","left");
totalMove = 0;
//things you shouold do here
result= true;
}
return result;
}
}
return false;
}
};
listView.setOnTouchListener(listViewOnTouchListener );
其他的onclickListener onLongClickListener 好普通 无需介绍
关键在于onTouchListener中 onDown的时候 返回false onCLICK 与longclick也会感应到这个动作,true就相反。。。然后在onMove的时候去统计移动的距离,设定一个滑动的敏感度,达到这个值就返回false 处理相应的操作,例如划屏更新UI。。。不过这个值就返回true让onclick的事件响应,同时设定一个duration时延给longclick事件 达到某个值的话 也直接返回true。。
没有直接的api方法让他们共存,在于我们如何使用而已。
1 楼
大柳树
2011-06-23
帅!!正好用到这!!
2 楼
bawanglb
2012-02-29
支持楼主,挺好
最新技术文章: