Android杂谈(9)一个源码的尴尬
2016-08-24 07:28
453 查看
本菜GitHub上开源了一个小的Android项目,感兴趣的看官大大们可以star下:
https://github.com/zhiaixinyang/MyFirstApp
今天找了一个开源项目,准确说不是开源...下载这个源码交了几个积分。
项目效果是这样的
项目本身没有啥新奇之处,只是使用的时候遇到了一个好玩的地方。
attr的属性就是菜单项的图片资源。有意思的地方就在这,只设置了一次,预览却出现了三个命名类似的三个图片资源。
当时我就有点懵逼了,怎么做到的...
但是作为高举伟大爱国主义旗帜的建设全面小康社会的党的接班人。
当看到源码的时候,原来....
成员变量stone是个内部类....作者写了一个循环,按照资源名+1,2,3的规则加入了stone这个数组中,然后在onDraw上画出来.....
9月21号补充
最近在学习自定义View,所以又把这个开源项目拿出来,学习记录这里边的思路.....
首先可以看出来,主干是一个圆形虚线,相关绘画代码如下:
计算这三个图标就比较的复杂,大部分都是计算....
在这里就梳理一下作者的用到的一些方法。
首先是onDraw()里边的,
这里边提到了drawInCenter()方法。
自定义View的初级阶段就是onDraw(),onMeasure()以及onLayout()的使用。如其名字一样,分别是绘制,测量,布局。在onDraw()中,通过Paint画笔和Canvas画布进行配合,绘制出一些简单的图形。
比如,canvas.drawCircle(cx,cy,radius,paintRed);的意思就是在cx,cy这个坐标以radius为半径,paintRed为画笔画一个圆....
https://github.com/zhiaixinyang/MyFirstApp
今天找了一个开源项目,准确说不是开源...下载这个源码交了几个积分。
项目效果是这样的
项目本身没有啥新奇之处,只是使用的时候遇到了一个好玩的地方。
attr的属性就是菜单项的图片资源。有意思的地方就在这,只设置了一次,预览却出现了三个命名类似的三个图片资源。
当时我就有点懵逼了,怎么做到的...
但是作为高举伟大爱国主义旗帜的建设全面小康社会的党的接班人。
当看到源码的时候,原来....
成员变量stone是个内部类....作者写了一个循环,按照资源名+1,2,3的规则加入了stone这个数组中,然后在onDraw上画出来.....
9月21号补充
最近在学习自定义View,所以又把这个开源项目拿出来,学习记录这里边的思路.....
首先可以看出来,主干是一个圆形虚线,相关绘画代码如下:
/** * 这个类的作用就是将Path的线段虚线化,也就是画虚线效果。 * 第1个数组参数的效果是: * 绘制长度5的实线,再绘制长度5的空白,再绘制长度5的实线,再绘制长度5的空白,依次重复。 * 第2个参数,1是起始位置的偏移量。 */ PathEffect effects = new DashPathEffect(new float[]{5,5,5,5},1); mPaint.setPathEffect(effects);
计算这三个图标就比较的复杂,大部分都是计算....
在这里就梳理一下作者的用到的一些方法。
首先是onDraw()里边的,
@Override public void onDraw(Canvas canvas) { //画一个白色的圆环 canvas.drawCircle(mPointX, mPointY, mRadius, mPaint); /** * 将每个菜单画出来 * STONE_COUNT,需要绘画的图片数 * */ for (int index = 0; index < STONE_COUNT; index++) { if (!mStones[index].isVisible) continue; drawInCenter(canvas, mStones[index].bitmap, mStones[index].x, mStones[index].y); } }
这里边提到了drawInCenter()方法。
private void drawInCenter(Canvas canvas, Bitmap bitmap, float left, float top) { Rect dst = new Rect(); dst.left = (int) (left - menuRadius); dst.right = (int) (left + menuRadius); dst.top = (int) (top - menuRadius); dst.bottom = (int) (top + menuRadius); canvas.setDrawFilter(pfd); canvas.drawBitmap(bitmap, null, dst, mPaint); }
menuRadius:在onMeasure()中赋值为屏幕宽度的十分之一。
canvas.setDrawFilter(pfd):设置抗锯齿。接下来是mStones(一个内部类,用于封装了每个按钮图片的信息)的x和y的计算赋值....
/** * 计算某点的角度 * @param x * @param y * @return */ private int computeCurrentAngle(float x, float y) { //Math.sqrt(),返回传入值的平方根。 float distance = (float) Math .sqrt(((x - mPointX) * (x - mPointX) + (y - mPointY) * (y - mPointY))); int degree = (int) (Math.acos((x - mPointX) / distance) * 180 / Math.PI); if (y < mPointY) { degree = -degree; } return degree; }
自定义View的初级阶段就是onDraw(),onMeasure()以及onLayout()的使用。如其名字一样,分别是绘制,测量,布局。在onDraw()中,通过Paint画笔和Canvas画布进行配合,绘制出一些简单的图形。
比如,canvas.drawCircle(cx,cy,radius,paintRed);的意思就是在cx,cy这个坐标以radius为半径,paintRed为画笔画一个圆....
相关文章推荐
- 通过创建一个位图的XY Chart来学习Android绘图类Rect,Paint,Bitmap,Canvas(附源码)
- 给大家分享一个在Windows下批量下载Android源码的方法
- 一个提供Android各历史版本在线源码的网址
- 一个程序员一月的开销统计分析、(附上PC端和移动端android源码)
- 一个基于ffmpeg,Android 和linux SDL 都可使用的播放器源码
- 将Android源码作为一个工程导入到Eclipse
- Android UI开发: 横向ListView(HorizontalListView)及一个简单相册的完整实现 (附源码下载)
- 分享一个Android源码在线阅读的网址
- 一个很好的Android应用源码下载站——WAP地带
- 一个最小物联网系统设计方案及源码——Android客户端
- 发布一个练笔的 Android 阅读器,轻微仿91 Android 阅读器【后续将提供源码】
- android导入源码编译的一个错误
- 我的Android笔记(十二)——分享一个自己写的cnBeta客户端源码
- 一个公开了源码的Android UI 设计器,很好很强大,不知道的可以看看
- android 实现选中一个单词官方源码
- 关于下载xbmc后打开Android 源码时的一个思考问题?兼各平台安装xbmc 的中文显示
- 通过创建一个位图的XY Chart来学习Android绘图类Rect,Paint,Bitmap,Canvas(附源码)
- 如何在Android系统源码中添加一个C项目?
- android2.3 View视图框架源码分析之一:android是如何创建一个view的?
- 分享一个难得的YiBo微博客户端应用源码Android版