涉及技术

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. secureCrt开启oracle
  2. IDEA 中的神奇插件:防沉迷、防猝死...
  3. 陀螺仪、罗经、IMU、MEMS四者的区别
  4. Permission denied (maybe missing INTERNET permission) 错误解决
  5. 初识:如何实现利用C语言代码封装成可以安装的windows软件?
  6. python列表数据类型(一分钟读懂)
  7. 宣布降低Windows Azure 存储和计算的价格
  8. 海康威视相机SDK开发(多个相机)
  9. 【人工智能沙龙】未来,语音识别可能应用于哪些商业化场景?
  10. ADByby 自定义过滤语法简表
  11. 大学生创业实战 - 代充的套利故事
  12. linux capability详解与容器中的capability
  13. 笔记本快捷键(fl980)
  14. jquery清空购物车小案例
  15. 6. Lots of Parabolas
  16. 2020年南京社保减免优惠政策(2-12月汇总)
  17. 护理学跨考计算机专业,什么是跨专业考研?
  18. 微信小程序调用python分析图片_小帅丶干货之图像识别在微信小程序展示
  19. 支持nfc的android手机型号,NFC手机有哪些 2017支持NFC功能的手机推荐
  20. 5月6日----5月9日二年级课程表

热门文章

  1. Photoshop 快速选择工具抠图
  2. matlab求取状态方程的传递函数并实现系统解耦
  3. win10系统迁移到新固态硬盘,win10系统备份还原
  4. 读后感系列3:《人类简史》尤瓦尔·赫拉利(一)
  5. 前端工程师的基本工作流程
  6. NXP JN5169 唤醒定时器
  7. NLP-文本挖掘-综述
  8. Python微信公众号接入图灵机器人
  9. python图灵机器人教程_Python-微信图灵机器人
  10. 简单概率dp-hdu-4487-Maximum Random Walk