- 浏览: 544759 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
q649916440:
使用这个的目的是什么呢?感觉没啥优势啊,用起来还绕个大圈
使用googleapi-client-java操作gtasks(一) -
文艺吧网:
还有一个GZIP的问题,我怎么转都乱码最后是因为要解压一下ht ...
关于使用InputStreamReader读取GBK编码文件乱码的问题 -
xiaodousa:
9楼正解!
Android在Listview中使用EditText -
fxiaozj:
zyp09 写道很想知道在Mainactivity界面怎么获得 ...
Android PreferenceActivity 学习笔记 -
zylc369:
楼主很用心,一定要顶
Android通过共享用户ID来实现多Activity进程共享
在上文中我们对手势操作进行了基本验证,
我们将上文中添加第二个textview的改为添加Listview,代码如下:
执行ap,滑动屏幕切换到第二屏,可以看到第二屏被换成了一个ListView,
并且没有填充完整个屏幕,这时如果在底部非ListView区域向左滑动,
仍然可以切换到第一屏,但是在Listview区域滑动就没有效果了,
因为touch事件被Listview处理了,ViewFlipper无法收到touch事件也就无法进行手势判断。
我们给ListView也增加一个touch事件监听器,代码如下:
此时在ListView上滑动也能实现屏幕切换了。
我们再给Listview增加响应点击事件的处理,代码如下:
当点击Listview的条目的时候,就会弹出窗口显示点击了哪一项,此时的代码可参见附件1。
截止到此时,似乎Listview支持左右滑动的操作完成了,但实际上仍有两个问题:
首先就是滑动时,Listview有时会有条目被高亮,这个问题倒还不是太严重。
再次就是ContextMenu每次滑动都会被激活,我们可以通过代码验证,
创建ListView的代码稍作修改:
另外Activity的代码增加:
当我们在ListView的某一项上长按时就会弹出菜单,
但是当滑动时,即使屏幕切换到了第一屏,此菜单仍然会弹出。
此时的验证代码参加附件2。
PS:现在的解决方法:
当判断出是手势事件后,用CANCEL事件吃掉就不会导致菜单弹出了。
为了解决上面的问题,我尝试了以下办法:
1.在ListView的touch事件监听函数中始终返回true,吃掉所有事件,
这样的修改导致不能相应点击,ListView不能上下滑动,此路不通。
2.在GestureDetector的fling函数中向ListView发送一个MotionEvent.ACTION_CANCEL事件,
总是空指针异常,怀疑是因为touch事件没有被ListView处理过,其内部成员状态异常,
于是我从ListView继承实现了一个ListView,在onTouchEvent中呼叫super.onTouchEvent,但是发送MotionEvent.ACTION_CANCEL事件时仍然是空指针异常,再次失败。
3.GestureDetector的onDown函数返回true,吃掉down事件,此时点击时没有高亮项了,
切换时contextmenu也不被trigger了,但是长按也无法弹出contextmenu了。
为了能弹出contextMenu,那么就要在GestureDetector的onLongPress函数中调用ListView.showContextMenuForChild()来弹出菜单,
那么GestureDetector就与ViewFlipper的不通用了,
所以我重新由ListView继承实现了一个类,这个类自身绑定了一个GestureDetector:
另外为了能够显示contextmenu时在哪一项上激活的,在Activity增加函数:
从LogCat即可看到打印输出。
此时此ListView可以响应手势、可以响应点击、可以弹出菜单,
基本的功能已经满足,另外再微调一下ondown函数,当点击时可以高亮一下。
最终代码可参见附件3。
PS:
最好的办法还是直接从AbsListView来修改,将左右方向手势判断加入进去,待研究。
我们将上文中添加第二个textview的改为添加Listview,代码如下:
ListView lv = new ListView(this); lv.setBackgroundColor(0xff808080); final String[] items = {"one", "two", "three"}; lv.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items)); mVf.addView(lv,new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
执行ap,滑动屏幕切换到第二屏,可以看到第二屏被换成了一个ListView,
并且没有填充完整个屏幕,这时如果在底部非ListView区域向左滑动,
仍然可以切换到第一屏,但是在Listview区域滑动就没有效果了,
因为touch事件被Listview处理了,ViewFlipper无法收到touch事件也就无法进行手势判断。
我们给ListView也增加一个touch事件监听器,代码如下:
lv.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { return mVfDetector.onTouchEvent(event); } });
此时在ListView上滑动也能实现屏幕切换了。
我们再给Listview增加响应点击事件的处理,代码如下:
lv.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { new AlertDialog.Builder(MainActivity.this) .setMessage(items[arg2]) .create() .show(); } });
当点击Listview的条目的时候,就会弹出窗口显示点击了哪一项,此时的代码可参见附件1。
截止到此时,似乎Listview支持左右滑动的操作完成了,但实际上仍有两个问题:
首先就是滑动时,Listview有时会有条目被高亮,这个问题倒还不是太严重。
再次就是ContextMenu每次滑动都会被激活,我们可以通过代码验证,
创建ListView的代码稍作修改:
//使Listview长一些 final String[] items = {"one", "two", "three", "four", "five", "six", "sevent", "eight", "nine"}; registerForContextMenu(lv);
另外Activity的代码增加:
@Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { menu.add("Menu 1"); menu.add("Menu 2"); menu.add("Menu 3"); super.onCreateContextMenu(menu, v, menuInfo); }
当我们在ListView的某一项上长按时就会弹出菜单,
但是当滑动时,即使屏幕切换到了第一屏,此菜单仍然会弹出。
此时的验证代码参加附件2。
PS:现在的解决方法:
getListView().setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if( mDetector.onTouchEvent(event) ) { MotionEvent cancelEvent = MotionEvent.obtain(event); cancelEvent.setAction(MotionEvent.ACTION_CANCEL); v.onTouchEvent(cancelEvent); return true; } return false; } });
当判断出是手势事件后,用CANCEL事件吃掉就不会导致菜单弹出了。
为了解决上面的问题,我尝试了以下办法:
1.在ListView的touch事件监听函数中始终返回true,吃掉所有事件,
这样的修改导致不能相应点击,ListView不能上下滑动,此路不通。
2.在GestureDetector的fling函数中向ListView发送一个MotionEvent.ACTION_CANCEL事件,
总是空指针异常,怀疑是因为touch事件没有被ListView处理过,其内部成员状态异常,
于是我从ListView继承实现了一个ListView,在onTouchEvent中呼叫super.onTouchEvent,但是发送MotionEvent.ACTION_CANCEL事件时仍然是空指针异常,再次失败。
3.GestureDetector的onDown函数返回true,吃掉down事件,此时点击时没有高亮项了,
切换时contextmenu也不被trigger了,但是长按也无法弹出contextmenu了。
为了能弹出contextMenu,那么就要在GestureDetector的onLongPress函数中调用ListView.showContextMenuForChild()来弹出菜单,
那么GestureDetector就与ViewFlipper的不通用了,
所以我重新由ListView继承实现了一个类,这个类自身绑定了一个GestureDetector:
@Override public boolean onDown(MotionEvent e) { return true; //吃掉Down事件 } @Override public void onLongPress(MotionEvent e) { System.out.println("Listview long press"); int position = pointToPosition((int)e.getX(), (int)e.getY()); if( position != ListView.INVALID_POSITION) { View child = getChildAt(position - getFirstVisiblePosition()); if(child != null) GestureListView.this.showContextMenuForChild(child); } }
另外为了能够显示contextmenu时在哪一项上激活的,在Activity增加函数:
@Override public boolean onContextItemSelected(MenuItem item) { AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); System.out.println("View " + info.position + " context menu activited."); return super.onContextItemSelected(item); }
从LogCat即可看到打印输出。
此时此ListView可以响应手势、可以响应点击、可以弹出菜单,
基本的功能已经满足,另外再微调一下ondown函数,当点击时可以高亮一下。
最终代码可参见附件3。
PS:
最好的办法还是直接从AbsListView来修改,将左右方向手势判断加入进去,待研究。
- GestureDemo-1.rar (12 KB)
- 下载次数: 223
- GestureDemo-2.rar (12.1 KB)
- 下载次数: 194
- GestureDemo-3.rar (12.6 KB)
- 下载次数: 435
发表评论
-
使用googleapi-client-java操作gtasks(二)
2012-03-29 15:34 4577对于很多第三方的机器没有安装Google账户管理,要访问GTa ... -
Android Activity 生命周期再验证
2011-11-22 16:20 7984Android Activity 生命活动 ... -
Nexus one开关键坏掉后的解决方法
2011-10-14 15:17 4458Nexus one手机无法开机了,网上搜索了一下发现很多人遇到 ... -
改包名导致JNI调用失败的问题
2011-08-31 13:41 5137修改以前的代码,移动了一个文件,修改了其包名,在这个文件代码中 ... -
使用googleapi-client-java操作gtasks(一)
2011-08-10 18:07 14788Google Tasks的API终于开放 ... -
一个好用的Google api调试网址
2011-08-09 11:00 1809https://code.google.com/apis/ex ... -
Apk文件Hack试验
2011-07-11 17:54 2853试验1:反编译dex文 ... -
一个由onKeyUp引起的问题
2011-04-19 16:05 1916刚写一个小程序,在用户按下Back按键返回时,需要保存一些数据 ... -
Android自定义组合控件
2011-03-20 18:56 12815目标:实现textview和ImageButton组合,可以通 ... -
也谈Android下一个apk安装多个程序入口图标
2011-03-18 11:28 9183Android中有的Ap功能比较复杂,为了方便用户使用,可以提 ... -
Android AppWidget实例验证
2011-02-25 15:26 133071.创建AppWidget布局,包含两个TextView用来显 ... -
Android Activity LaunchMode 验证
2011-02-23 15:04 8243在Android中,每个Activity有4种LaunchMo ... -
文件夹权限引起的MediaPlayer播放不正常
2011-01-20 20:41 2290写了一个Ap,在程序运行时会解压一些声音文件到/data/da ... -
关于使用InputStreamReader读取GBK编码文件乱码的问题
2011-01-19 17:13 25736BufferedReader reader = new Buf ... -
Android下Listview的onItemClick以及onItemLongClick等易模糊问题验证
2010-12-23 21:10 22753最近在使用Listview又遇到了以前碰到的问题,当Listv ... -
通过Java annotation以及反射机制实现不同类型通用的数据库访问接口
2010-12-22 12:14 5480在日常开发中会遇到这 ... -
Android PreferenceActivity 学习笔记
2010-12-11 12:45 20012在Ap中有时需要设置一些配置参数,这些参数通过配置文件保存。 ... -
Android平台sqlite快速入门
2010-12-07 12:00 2329以下概念都是在Android平台的sqlite3限制下的理解: ... -
Android下使用googleapi-client-java操作google calendar(三)
2010-11-29 18:57 47644.获取日历列表并显示: 原理:向https://www. ... -
Android下使用googleapi-client-java操作google calendar(二)
2010-11-28 22:50 23473.与服务器进行数据交互: 交互是通过HTTP请求及响应来进 ...
相关推荐
NULL 博文链接:https://mypyg.iteye.com/blog/761331
android TextView android TextView
NULL 博文链接:https://a-bin.iteye.com/blog/1197564
android里同时显示多个gif的关键代码,调用时使用setSpannableText( textView,content,textId)代替setText(content)就行了。改进版本,不需要在为没一个gif表情开一个新线程来维护了
ListView每项跑马灯效果,TextView跑马灯自己写的Demo
listview textview 水平滚动,用了Adapter,一次滚动两个textview
一个自定义的android的翻转textview,效果很不错的
A custom TextView, when pinch in out gesture used, then it reizes text size. How to use ? Import the ZoomTextView.java class in your project and use it as following. Can also set the zoom in ...
自定义spinner适配器,样式 用textview和listview自定义spinner
Android 一个TextView中设置不同字体大小和颜色
主要介绍了Android实现在TextView文字过长时省略部分或滚动显示的方法,结合实例形式分析了Android中TextView控件文字显示及滚动效果相关操作技巧,需要的朋友可以参考下
安卓Android源码——textView.rar
Android 为textView增加边框效果,这又是一个初级的Android文字布局示例,今天是为TextView文字框增加一个外边框,可实现在画布上画边框的功能,在填充方面,你还可使用不透明的9.png和透明的9.png,带边框的...
有时候看到原型图上要求图片和文字对齐,但是直接使用TextView的话总是有一段空白,这里直接继承TextView重写onDraw方法去掉上下边距,但是简单粗暴,导致只能显示文字,没有TextView其他的功能了。
android TextView 支持CSS样式
主要介绍了android动态布局之动态加入TextView和ListView的方法,涉及Android动态布局的实现技巧,需要的朋友可以参考下
android实现TextView文字部分渐变色;LinearGradientFontSpan SpannableString
Android有趣的textview与button特效