- 浏览: 403296 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
ysn003:
这样用就好啦!!!<Button ...
Android学习 之 ColorStateList按钮文字变色 -
ysn003:
Android学习 之 ColorStateList按钮文字变色 -
vitoliao:
楼主你好,如果你的代码需要实现的是回显功能,需要在MainCl ...
Java学习 之 Socket(实现简易的C/S聊天室) -
xinqiqi123:
在item布局中要是引用到自定的东西,item就会显示不全
Android学习 之 问题&解答 ScrollView中嵌套ListView时显示不全的简便解决方案 -
CTXsamCTX:
很好,学习了。
Android 图形用户界面 之 绘图(一)
原文地址:http://mypyg.iteye.com/blog/761461
在上文中我们对手势操作进行了基本验证,
我们将上文中添加第二个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));
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);
- }
- });
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();
- }
- });
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);
//使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);
- }
@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。
为了解决上面的问题,我尝试了以下办法:
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);
- }
- }
@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);
- }
@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)
- 下载次数: 13
- GestureDemo-2.rar (12.1 KB)
- 下载次数: 14
- GestureDemo-3.rar (12.6 KB)
- 下载次数: 28
发表评论
-
Android 学习 之 使用ActivityGroup调用对应Activity的菜单
2011-12-23 17:34 2593代码很简单,直接贴在这里了。 在使用ActivityGrou ... -
Android 学习 之 TextView结合SpannableString
2011-12-22 12:02 5427protected void onCreate(Bundle ... -
Android 学习 之 图形绘制篇 获取要绘制的文字的宽度/长度
2011-11-29 15:43 7381转自:http://www.cnblogs.com/Tiger ... -
Android 学习 之 键盘问题
2011-10-12 12:00 45111.隐藏键盘 一般情况下,都是在点击某个View的时候 ... -
Android 学习 之 SD卡相关
2011-08-19 15:42 13001.获取SD的路径字符串 public static Str ... -
Android 学习 之 关于应用程序的自适应问题(一)
2011-08-16 12:18 1609转自:http://venus-chen.iteye.com/ ... -
Android 学习 之 资源文件 布局中ID的引用
2011-08-16 11:30 5977转自:http://tiantian0521.blog.163 ... -
Android 学习 之 关闭应用程序的方法
2011-08-10 11:46 1401package com.close; import jav ... -
Android 学习 之 资源文件 动态修改strings.xml中的字符资源
2011-08-10 11:25 6490转自:http://www.cnblogs.com/cools ... -
Android 学习 之 Intent 调用大全
2011-08-10 11:21 1019从别人那里抠的,代码有点乱,仅供自己参考,需要的自己整理下吧, ... -
Android学习 之 动态切换全屏和非全屏模式
2011-06-02 10:03 4403直接贴出代码: package com.screen; ... -
Android学习 之 常见知识点记录
2011-06-01 20:35 1850也是转的,呜呜,人家写的好好,有记录的习惯,值得学习,转载请说 ... -
Android学习 之 获取可视区域的Rect对象(顺带获取状态栏和标题栏高度的方法)
2011-06-01 11:31 10864这个有什么用捏,这 ... -
Android 基本控件 之 Dialog(二)Dialog主题的Activity
2011-06-01 10:10 2687转自:http://www.cnblogs.com/xi ... -
Android 基本控件 之 SeekBar(一) 个性你的视图
2011-05-31 16:34 12138系统自带的SeekBar组件 ... -
Android 系统设置 之 保持手机屏幕常亮的方法
2011-05-25 18:13 9781方法一: 在Activity的onCreate()中: ... -
Android 图形用户界面 之 绘图(二) Paint类 主要方法介绍
2011-05-25 18:09 9254摘自《Ophone应用开发权威指南》: /** * P ... -
Android 图形用户界面 之 绘图(一)
2011-05-25 17:59 30665直接贴上代码: BasicViewDraw.java ... -
【转】Android 画图 之 Matrix(三)
2011-05-24 19:04 1641原文地址:http://developer.51cto.com ... -
【转】Android 画图 之 Matrix(二)
2011-05-24 18:51 1397原文地址:http://chroya.iteye.com/ ...
相关推荐
总结来说,Android手势研究是提高应用交互体验的关键,理解和熟练运用手势检测机制对于开发者至关重要。通过对比TextView和ListView的手势处理,我们可以更好地设计和实现用户友好的界面交互,同时借助Android提供的...
这篇博客“Android手势研究(textview及listview对比验证)(一)”探讨了如何在TextView和ListView中实现和比较手势识别功能。 首先,TextView是Android中用于显示单行或多行文本的基本组件,而ListView则是展示可...
【基于Android的图书管理系统源代码】是一个专门为Android平台设计的应用程序,用于管理和操作图书相关数据。...通过深入研究这个项目,开发者可以提升自己的Android开发技能,为构建更复杂的应用奠定基础。
通过研究这个源代码,开发者不仅可以学习到Android应用的基本架构,还能了解到实际社交应用中的一些常见功能实现,对提升Android开发技能非常有帮助。对于初学者来说,这是一个很好的实践平台,可以边学边做,加深...
【Android阅读器源码解析】 在移动设备上,阅读电子书籍已经成为现代生活的一部分...通过深入研究源码,开发者不仅可以理解Android应用的基本架构,还能学习到文件操作、UI设计、数据存储和性能优化等多个方面的知识。
以上只是Android Activity中控件效果的一部分,实际开发中还有更多高级用法和组合技巧,如触摸事件处理、手势识别、自定义控件等。熟练掌握这些控件及其效果,能够帮助开发者创建出丰富多样的用户界面,提升应用的...
#### 二、Android进阶技术 1. **数据存储方式** - 文件存储:适用于小规模数据存储,可以通过File类进行读写操作。 - SharedPreferences:以键值对形式存储简单的配置信息。 - SQLite数据库:适用于复杂的结构化...
2. **控件(Widgets)**:Android提供了一系列预定义的控件,如Button、EditText、TextView、ImageView等,用于构建交互式界面。理解这些控件的属性和用法是UI设计的基础。 3. **主题和样式(Themes & Styles)**:...
2. **数字签名**:在Android应用发布时,数字签名用于验证应用的完整性和开发者身份,确保应用未经篡改,并允许系统安装和更新应用。 3. **JNI (Java Native Interface)**:允许Java代码调用C/C++原生代码,用于...
此外,还需掌握Android布局文件XML的编写,如LinearLayout、RelativeLayout、ConstraintLayout等布局管理器,以及ImageView、TextView、Button等基本UI控件的使用。 2. UI设计与模仿:高仿微信界面意味着要对微信的...
2. **下拉效果**:在Android中,下拉效果常常通过SwipeRefreshLayout实现,这是一个允许用户通过下拉手势刷新内容的组件。当用户下拉时,它会展示一个刷新指示器,提供视觉反馈。配合ListView或RecyclerView,用户在...
1. **TextView**:TextView是显示文本的基本控件,可以用来显示单行或多行文本。在示例中,可能包含了不同字体、颜色、大小以及对齐方式的展示。 2. **EditText**:EditText用于用户输入数据,如文本、数字等。它...
在Android中,可以使用`RecyclerView`或者`ListView`配合自定义的Adapter来展示这些信息。每个列表项视图(ViewHolder)应该包含必要的UI元素,如ImageView、TextView等,用于显示电影的不同属性。同时,为了提高...
开发者需要熟悉安卓的UI设计,如使用XML布局文件创建界面,以及各种控件的使用,如TextView、Button、ListView等。此外,还需掌握Activity和Fragment的生命周期管理,以及Intent用于不同组件间的通信。 2. **课程表...
《Android UI组件演示——UIDemos详解》 ...通过深入研究这个项目,开发者能够更好地掌握Android UI设计的精髓,创造出更加直观、易用的应用。无论是初学者还是经验丰富的开发者,都可以从中受益匪浅。