涉及技术

ListView使用、动画、自定义控件

第一步:ListView

ListView应该是每个学习Android的人都会学到的,所以我在这也就不仔细的说了,我只说一下设计的细节。
我们需要建立一个布局,用来显示在上一篇文章的PagerActivity中。xml不贴出了,可以看这里。其实很简单,就是建立了一个ListView,设置分割距离和颜色并且去掉上下的阴影。ListView中每个item显示的布局可以看这里,就只是一个TextView,用于显示标题。
关于数据我觉得我也不用多说,xml的处理也是Android学习的必学课程,为了练习xml的处理,所以我处理数据用了不同的方法,这里用的是SAX。数据提取出来之后给item加上点击事件:跳转到我们还未创建的HonorActivity。HonorActivity是用来显示每个荣誉的详细信息,也就是三个TextView,很简单,代码和布局可以看这里和这里。代码大概如下:
            honorsListView = (ListView) honors.findViewById(R.id.honors_list);honorsListView.setAdapter(new ArrayAdapter<String>(this, R.layout.honors_item, honorsListData()));honorsListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view,final int position, long id) {Intent toHonor = new Intent(context, HonorActivity.class);toHonor.putExtra("id", position + 1);startActivity(toHonor);}});
但是简简单单的展示这些文字,完全没有一点吸引力,有吸引力的界面都是有动态交互的,所以我决定给这个列表的交互加一些动画,效果如下:
这有两个动画,第一个是点击了某一个条目之后和返回条目列表的动画,第二个是Activity切换的动画。
先说第二个动画,这个动画比较简单,我是基于主题来实现的,在Android中,AndroidManifest.xml文件中对Activity指定android:theme属性就可以设置主题了,如下:
<activityandroid:name="com.xjy.resume.HonorActivity"android:theme="@style/AppHonorTheme">
</activity>

然后再定义这个主题:

    <style name="AppHonorTheme" parent="android:Theme.NoTitleBar"><item name="android:windowAnimationStyle">@style/honorAnimation</item></style>

这个主题只有一个item,就是android:windowAnimationStyle,顾名思义,这个属性指定了窗口动画的样式,这个样式也是我们自己创建的,如下:

    <style name="honorAnimation" parent="@android:style/Animation"><item name="android:activityOpenEnterAnimation">@anim/bottomslidein_anim</item><item name="android:activityOpenExitAnimation">@anim/fadeout_anim</item><item name="android:activityCloseEnterAnimation">@anim/fadein_anim</item><item name="android:activityCloseExitAnimation">@anim/bottomslideout_anim</item></style>

关于这个样式的四个属性大家看名字也能看的到,也就是新打开的Activity进入退出的动画和旧Activity进入退出的动画,动画的定义由于代码比较多,占篇幅太大,我就不贴出来了,这里有四个链接:

bottomslidein_anim、fadeout_anim、fadein_anim、bottomslideout_anim
如果觉得有必要解释这些动画的话,我会重新写一篇文章来介绍Android的动画。
现在要实现第一个动画了,因为要达到图片中那样像拉帘子一样的效果,所以我们针对每一个ListView的item都要做处理,思路如下:
1.获取到每个item。
2.为每个item添加一个左右方向压缩的动画。
3.每个动画都延迟一定时间执行。
4.最后一个动画执行完成之后跳转Activity。
思路一出来,代码写起来就很简单了,修改之前的代码后,如下:
            honorsListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view,final int position, long id) {int count = honorsListView.getChildCount();for (int i = 0; i < count; i++) {View child = honorsListView.getChildAt(i);//获取到itemScaleAnimation sa = new ScaleAnimation(1.0f, 0.0f, 1.0f, 1.0f, Animation.RELATIVE_TO_SELF, 0.5f,Animation.RELATIVE_TO_SELF, 0);//缩放动画,只缩放左右sa.setDuration(500);//动画执行的时间sa.setFillAfter(true);//这个一定要设置,不然动画执行完后item又会变回原来的样子sa.setStartOffset((count - i)*50);//设置开始时间的偏移量,就是靠这个来实现拉帘子的效果if (child != null) {child.setAnimation(sa);//将动画设置给item}child.startAnimation(sa);//执行动画}//因为我们的拉帘子效果是从下面拉到上面,所以最后一个执行的动画是第一个item,给item设置一个//AnimationListener,在onAnimationEnd中完成跳转ActivityhonorsListView.getChildAt(0).getAnimation().setAnimationListener(new Animation.AnimationListener() {@Overridepublic void onAnimationStart(Animation animation) {}@Overridepublic void onAnimationEnd(Animation animation) {Intent toHonor = new Intent(context, HonorActivity.class);toHonor.putExtra("id", position + 1);startActivity(toHonor);}@Overridepublic void onAnimationRepeat(Animation animation) {}});}});

第二步:自定义控件

做Android的开发,怎么能不会自定义控件呢,所以为了体现我掌握了这个技术,我专门在简历中自定义了一个图表控件:
通过这个控件,能够展示我对某一个技术的熟练度。自定义控件怎么做我也不详细的说,我们定义一个继承View的类。变量的初始化不是重点,各个变量的意义如下:
重点是继承onDraw来绘制这个控件,思路如下:
1.绘制一个内圆,内填充。
2.绘制一个外扇形,内部不填充,不连接圆心,边调粗一些。
3.绘制技能的名字。
话不多说,有了思路直接就有代码:
    @Overrideprotected void onDraw(Canvas canvas) {
//        Log.i("Ring","onDraw");super.onDraw(canvas);int width = canvas.getClipBounds().width();//获取高度int center = width / 2;//计算中心点int innerCircle = Math.round(center - this.ringWidth - 4); //设置内圆半径int ringWidth = Math.round(this.ringWidth); //设置圆环宽度//绘制内圆Paint p = new Paint();p.setStyle(Paint.Style.FILL);p.setColor(skillColor);p.setStrokeWidth(1);canvas.drawCircle(center, center, innerCircle-20, p);//绘制圆环this.paint.setColor(skillColor);//this.paint.setARGB(255, 212 ,225, 233);this.paint.setStrokeWidth(ringWidth);//创建绘制圆环的范围RectF oval = new RectF();oval.top = this.ringWidth / 2 + 2;oval.left = this.ringWidth / 2 + 2;oval.right = width - this.ringWidth / 2 - 2;oval.bottom = width - this.ringWidth / 2 - 2;//扫过的角度,也就是能力值,注意一定要用float计算,不然会算出0float sweepAngle = (skillPoint / 100f) * 360f;//绘制能力值canvas.drawArc(oval, 270, sweepAngle, false, this.paint);p.setTextSize(TEXT_SIZE);p.setColor(skillTextColor);p.setTextAlign(Paint.Align.CENTER);canvas.drawText(skillText, 0, skillText.length(), center, center, p);}

这个控件大概就是这样了,但是还有一些东西需要处理,比如点击、颜色根据能力改变等等,我们在下一篇文章中会继续讨论。

结尾+扯淡

下一篇文章会继承这篇文章创建的自定义控件,实现更多更强大的功能。
继续扯淡,其实我很想做Android,但是目前成熟一些的做Android的公司投了简历就像石沉大海,完全没有回应了,目前收到的offer也有几个,但是都是做J2EE的,是我最熟练的,却不是最感兴趣的。找工作好辛苦啊,坚持了这么久,也不能就这么放弃,继续加油吧~
脑袋里还有很多的想法,比如我即将要做的课程设计(协作平台)、或者是社交日历等,如果我以后动手实现了,我也一定会分享出来。
本项目已经托管到了Github。

Android版简历(三)相关推荐

  1. Android版简历(一)

    简介 本人是二本应届毕业生,由于近来找工作,有的公司比较挑学校,好几次都没有笔试的机会.所以我决定弄点让人眼前一亮的东西,因为我个人比较喜欢Android开发(个人觉得我的J2EE比较好,Androi ...

  2. Android版简历(四)

    涉及技术 自定义控件.自定义控件动画 第一步:继承自定义控件 虽然已经实现了需要的控件,但是这个控件的功能还是不够强大,使用起来也不够方便.举个例子:让 控件的颜色随着能力值的大小而不同或者是 点击之 ...

  3. Android版简历(二)

    涉及技术 Pager控件.Menu使用.短信电话调用 第一步:创建菜单 上篇文章我们已经创建好了主界面,但是仅仅只展示这么一点信息是完全不够的吸引面试官的,所以我们得继续加一些需求. 如果我们成功的让 ...

  4. 疯狂Android讲义第三版完整带目录

    疯狂Android讲义第三版完整带目录 下载地址: https://pan.baidu.com/s/1TBgJqJ5gpyg8UXIKxk2UMA 扫码下面二维码关注公众号回复100014 获取分享码 ...

  5. Android版OpenCV图像处理技术亲自验证[三]之斑点检测ColorBlobDetector

    Android版OpenCV图像处理技术亲自验证[二]之斑点检测ColorBlobDetector 程序之美 前言 主体 运行效果 构建过程 核心代码 所遇问题 结束语 程序之美 前言 OpenCV是 ...

  6. 优秀Android开发简历都是这么写,你学会也可以进大厂

    最近收了很多程序员的简历,工作经验从1年到十几年不等.发现一个问题,工作经验范围差不多的程序员,简历看起来也差不多- 为啥程序员的简历如此统一?正好最近看到一个分享也分析了这个问题,结合我个人的一些经 ...

  7. android 校讯通 源码,校讯通Android版使用说明.doc

    校讯通Android版使用说明 说明: 以下截图均来自PC模拟器,实际效果会根据手机的Android系统版本高低,像素高低,分辨率大小,屏幕尺寸大小而有所差异,最终效果以自身手机为准! 下载校讯通An ...

  8. Android开发实战三之导入现有Android工程项目

    选择Create project from existing sample 打开Eclipse环境后,在左上方的菜单上选择[File->New->Project],会弹出[New Proj ...

  9. 看得见的数据结构Android版之数组表(数据结构篇)

    零.前言: 一讲到装东西的容器,你可能习惯于使用ArrayList和数组,你有想过ArrayList和数组的区别吗? Java的类起名字都不是随便乱起的,一般前面是辅助,后面是实质:ArrayList ...

  10. 还是俄罗斯方块之android版

    前面的,口水话 请直接跳过. 虽然现在不比以前了 也没多少人气了,放到首页 都不到几百的点击量.也许博客园整体水平也是在往水的方向发展.不谈那些了,哥也曾经辉煌过 有过一天上千的点击量 ,哥也曾经有过 ...

最新文章

  1. OpenCV图像旋转的原理与技巧
  2. Natural 自然语言处理(NLP)「全解析」
  3. mysql5.5以上开启慢查询
  4. 右键助手1.0正式版
  5. vuejs滚动条_vuescroll-一款基于vuejs2.x的虚拟滚动条
  6. python段子_Python爬取内涵段子里的段子
  7. Anaconda安装(ubuntu 14.04.03 LTS 64bit)
  8. poj 1502 MAPMaelstrom 单源最短路dijkstra
  9. C++ 一篇文章让你知道智能指针的魅力
  10. 指定单元格里面的,内容发生变化,触发事件,调用VBA代码。
  11. 一些常用jar包作用
  12. Java一键多值Map 之Guava Multimap 用法简介
  13. 基于JSP+Servlet校园二手交易平台
  14. 搜索中文与外文数据库中的综述类文献
  15. 加权平均np.average()
  16. 【嵌入式Linux】开发环境搭建
  17. OpenJudge百炼习题解答(C++)--题4040:买书问题
  18. 关于python如何编写注释(包含中文)及出现SyntaxError: Non-UTF-8 code starting with ‘\xca‘ in file错误解决方案
  19. C++builder中输出hello
  20. 计算机/微机存储技术

热门文章

  1. C++中类的三种继承方式public(公有继承)、protected(保护继承)、private(私有继承)之间的差别(附思维导图)
  2. 小米笔记本装了linux后u盘启动不了,小米笔记本电脑怎么设置u盘启动
  3. 如何把RAR文件改成ZIP格式
  4. win的反义词_英语中最常见 反义词、近义词、同义词及词形转换。欢迎大家收藏...
  5. 微软半日游,和CSDN同学们走进名企
  6. 《汉魏风云》2、孙吴兵法第一传人——辛苦的天才曹操
  7. 用python在大麦网抢票_大麦网抢票工具系列(一)
  8. MSP430f149红外接收头——读任意红外遥控器键值并显示于数码管
  9. java微信模板消息开发,微信公众号模板消息开发小结
  10. 软件测试系统性总结思维导图