当前位置: 编程技术>移动开发
本页文章导读:
▪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
支持楼主,挺好
最新技术文章: