Android使用ListView实现圆弧列表例子
-
如何在圆弧内绘制图片?
-
如何让列表按照圆弧的轨迹滑动?
-
P(x) = centerX + cos(alpha) *r.
-
P(y) = centerY - sin(alpha) * r.
我讲创建一个展示的列表作为样例。列表中的图片来自于资源文件夹。你可以参考我上传的源代码.
代码如下 | 复制代码 |
int[] playerDrawableResourceIds = new int[] { R.drawable.ronaldo, |
如何在圆弧中绘制图片?
首先,创建一个列表项的类CircleDrawItem.
代码如下 | 复制代码 |
public class CircleDrawItem { public Bitmap mIconBitmap; public double mAngle; } |
mIconBitmap: 列表项的位图.
mAngle: 每个列表项的弧度。这个弧度在旋转列表项的时候会被更新.
因为该圆弧将被在屏幕左侧展示。所以圆心将会把X坐标设置为负数。同时,Y坐标将被设置为屏幕中心的Y坐标值.
代码如下 | 复制代码 |
mCenterX = (int) (-Global.dp * 200); mCenterY = (int) (Global.dh / 2.0f); mRadius = (int) (450 * Global.dp); mStartAngleInRadian = Math.PI / 4; |
用Global 的值进行计算:
代码如下 | 复制代码 |
Global.dw = getResources().getDisplayMetrics().widthPixels; Global.dh = getResources().getDisplayMetrics().heightPixels; Global.dp = Global.density / 1.5f; |
这个圆弧保有CircleDrawItem的数组列表。第一项的弧度为PI/4。每个列表项的间隔是PI/10.第一项的弧度和两项间的弧度可以根据你的需求进行修改。
代码如下 | 复制代码 |
for (int i = 0; i < playerDrawableResourceIds.length; i++) { CircleDrawItem circleDrawItem = new CircleDrawItem(); circleDrawItem.mIconBitmap = decodeSampledBitmapFromResource( getResources(), playerDrawableResourceIds[i], 50, 50); circleDrawItem.mAngle = mStartAngleInRadian - i * Math.PI / 10; datas.add(circleDrawItem); } |
我创建了一个线程,以便将每个数据项绘制到圆弧中。
代码如下 | 复制代码 |
protected void draw() { Canvas canvas = getHolder().lockCanvas(); if (canvas == null) { return; } canvas.save(); canvas.drawColor(Color.TRANSPARENT, Mode.CLEAR); Paint paint = new Paint(); paint.setAntiAlias(true); paint.setFilterBitmap(true); paint.setAntiAlias(true); for (int i = 0; i < datas.size(); i++) { canvas.save(); CircleDrawItem item = datas.get(i); double x = mCenterX + Math.cos(item.mAngle) * mRadius; double y = mCenterY - Math.sin(item.mAngle) * mRadius; canvas.drawBitmap(item.mIconBitmap, (int) x - item.mIconBitmap.getWidth() / 2, (int) y - item.mIconBitmap.getHeight() / 2, paint); canvas.restore(); } canvas.restore(); getHolder().unlockCanvasAndPost(canvas); } |
如何让列表在圆弧中滑动?
引用OnGestureListener 并重载onScroll()函数。
代码如下 | 复制代码 |
|
计算滑动角度的方法如下:
代码如下 | 复制代码 |
|
今天都到一段代码,在onDestroy()方法中,使用了下面的代码:
mHandler.removeCallbacksAndMessages(null);
一开始我完全看不懂,我为什么参数是null,如果是null还需要移除什么Callbacks和Messages。后来察看官方文档有以下说明:
地址:http://developer.android.com/reference/android/os/Handler.html#removeCallbacksAndMessages%28java.lang.Object%29
public final void removeCallbacksAndMessages(Object token)
Added in API level 1
Remove any pending posts of callbacks and sent messages whose obj istoken. If token is null, all callbacks and messages will be removed.
上面的意思是说,如果参数为null的话,会将所有的Callbacks和Messages全部清除掉。
这样做的好处是在Acticity退出的时候,可以避免内存泄露。
如果你想制作自己的Android天气应用,那么你来对地方了.没有比使用Google Weather API XML解析更简单的方法了.所以你只需要知道如何解析XML即可.背景
我们需要简单的访问XML来解析XML文档.因此,你只要知道在XML文档代码里结果的位置地方,然后解析它就很简单.举个例子,在下面这张图里,我们想要知道有关突尼斯的斯法克斯的天气:
一开始,我们需要指定我们想要知道天气的城市或者州.
代码如下 | 复制代码 |
String c = city.getText().toString(); |
然后, 我们开始解析XML文档.
代码如下 | 复制代码 |
public class HandlingXmlStuff extends DefaultHandler { |
我们需要指定我们的数据模型和使用的功能.
代码如下 | 复制代码 |
public class XMLDataCollected { int temp= 0; String city=null ; public void setCity(String c) { city= c ; } public void setTemp(int t ) { temp = t ; } public String dataToString() { return "In"+city+" the current Temp in F is "+ temp+" degrees"; } } 。 |
兴趣点
在这个方案里, 你学会了在Android应用里如何使用XML解析来轻松制作许多功能
在Unity工程的Assets目录内,有一些文件夹的名称具有特殊意义,有专门的用途,将其收集列举如下.
ActionScript
存放Flash的ActionScript脚本。当游戏被导出为Flash格式的时候,这里的脚本会自动替换指定的C#脚本。
Editor
存放编辑器脚本。
Gizmos
通常是存放TIF格式的图片,在OnDrawGizmos函数内使用Gizmos.DrawIcon将其画为图标在场只中显示。
Plugins/Android
存放Android插件,包括.jar或XML文件等。
Plugins/iOS
存放iOS插件,包括.a或.m 或 .mm文件等。
Resources
存放使用Resources.Load()动态读取的资源,它们可以是图片、模型等不同类型的资源。
Standard Assets
标准Unity资源包。
StreamingAssets
独立存放到文件系统中媒体文件,如视频等。
WebPlayerTemplates
存放网页游戏模版,其中的每个模版均以-个自定义名称的子目录形式存放。
相关文章
- 有时为了网站安全和版权问题,会对自己写的php源码进行加密,在php加密技术上最常用的是zend公司的zend guard 加密软件,现在我们来图文讲解一下。 下面就简单说说如何...2016-11-25
- 下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
- ps软件是现在很多人都会使用到的,HSL面板在ps软件中又有着非常独特的作用。这次文章就给大家介绍下ps怎么使用HSL面板,还不知道使用方法的下面一起来看看。  ...2017-07-06
- 许多的朋友对于Plesk控制面板应用不是非常的了解特别是英文版的Plesk控制面板,在这里小编整理了一些关于Plesk控制面板常用的使用方案整理,具体如下。 本文基于Linu...2016-10-10
使用insertAfter()方法在现有元素后添加一个新元素
复制代码 代码如下: //在现有元素后添加一个新元素 function insertAfter(newElement, targetElement){ var parent = targetElement.parentNode; if (parent.lastChild == targetElement){ parent.appendChild(newEl...2014-05-31Android开发中findViewById()函数用法与简化
findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20- 如果我们的项目需要做来电及短信的功能,那么我们就得在Android模拟器开发这些功能,本来就来告诉我们如何在Android模拟器上模拟来电及来短信的功能。 在Android模拟...2016-09-20
jQuery 1.9使用$.support替代$.browser的使用方法
jQuery 从 1.9 版开始,移除了 $.browser 和 $.browser.version , 取而代之的是 $.support 。 在更新的 2.0 版本中,将不再支持 IE 6/7/8。 以后,如果用户需要支持 IE 6/7/8,只能使用 jQuery 1.9。 如果要全面支持 IE,并混合...2014-05-31- 大概有如下步骤 新建项目Bejs 新建文件package.json 新建文件Gruntfile.js 命令行执行grunt任务 一、新建项目Bejs源码放在src下,该目录有两个js文件,selector.js和ajax.js。编译后代码放在dest,这个grunt会...2014-06-07
使用percona-toolkit操作MySQL的实用命令小结
1.pt-archiver 功能介绍: 将mysql数据库中表的记录归档到另外一个表或者文件 用法介绍: pt-archiver [OPTION...] --source DSN --where WHERE 这个工具只是归档旧的数据,不会对线上数据的OLTP查询造成太大影响,你可以将...2015-11-24如何使用php脚本给html中引用的js和css路径打上版本号
在搜索引擎中搜索关键字.htaccess 缓存,你可以搜索到很多关于设置网站文件缓存的教程,通过设置可以将css、js等不太经常更新的文件缓存在浏览器端,这样访客每次访问你的网站的时候,浏览器就可以从浏览器的缓存中获取css、...2015-11-24- 夜神android模拟器如何设置代理呢?对于这个问题其实操作起来是非常的简单,下面小编来为各位详细介绍夜神android模拟器设置代理的方法,希望例子能够帮助到各位。 app...2016-09-20
- C#注释的一些使用方法浅谈,需要的朋友可以参考一下...2020-06-25
- 为了增强android应用的用户体验,我们可以在一些Button按钮上自定义动态的设置一些样式,比如交互时改变字体、颜色、背景图等。 今天来看一个通过重写Button来动态实...2016-09-20
- 一、下载 mysqlsla [root@localhost tmp]# wget http://hackmysql.com/scripts/mysqlsla-2.03.tar.gz--19:45:45-- http://hackmysql.com/scripts/mysqlsla-2.03.tar.gzResolving hackmysql.com... 64.13.232.157Conn...2015-11-24
- 如果我们要在Android应用APP中加载html5页面,我们可以使用WebView,本文我们分享两个WebView加载html5页面实例应用。 实例一:WebView加载html5实现炫酷引导页面大多...2016-09-20
安装和使用percona-toolkit来辅助操作MySQL的基本教程
一、percona-toolkit简介 percona-toolkit是一组高级命令行工具的集合,用来执行各种通过手工执行非常复杂和麻烦的mysql和系统任务,这些任务包括: 检查master和slave数据的一致性 有效地对记录进行归档 查找重复的索...2015-11-24- 深入理解Android中View和ViewGroup从组成架构上看,似乎ViewGroup在View之上,View需要继承ViewGroup,但实际上不是这样的。View是基类,ViewGroup是它的子类。本教程我们深...2016-09-20
- 下面我们来看一篇关于Android自定义WebView网络视频播放控件开发例子,这个文章写得非常的不错下面给各位共享一下吧。 因为业务需要,以下代码均以Youtube网站在线视...2016-10-02
- 目前,JSON已经成为最流行的数据交换格式之一,各大网站的API几乎都支持它。我写过一篇《数据类型和JSON格式》,探讨它的设计思想。今天,我想总结一下PHP语言对它的支持,这是开发互联网应用程序(特别是编写API)必须了解的知识...2015-10-30