Android版简历(三)
涉及技术
第一步:ListView
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);}});
<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进入退出的动画,动画的定义由于代码比较多,占篇幅太大,我就不贴出来了,这里有四个链接:
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) {}});}});
第二步:自定义控件
@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版简历(一)
简介 本人是二本应届毕业生,由于近来找工作,有的公司比较挑学校,好几次都没有笔试的机会.所以我决定弄点让人眼前一亮的东西,因为我个人比较喜欢Android开发(个人觉得我的J2EE比较好,Androi ...
- Android版简历(四)
涉及技术 自定义控件.自定义控件动画 第一步:继承自定义控件 虽然已经实现了需要的控件,但是这个控件的功能还是不够强大,使用起来也不够方便.举个例子:让 控件的颜色随着能力值的大小而不同或者是 点击之 ...
- Android版简历(二)
涉及技术 Pager控件.Menu使用.短信电话调用 第一步:创建菜单 上篇文章我们已经创建好了主界面,但是仅仅只展示这么一点信息是完全不够的吸引面试官的,所以我们得继续加一些需求. 如果我们成功的让 ...
- 疯狂Android讲义第三版完整带目录
疯狂Android讲义第三版完整带目录 下载地址: https://pan.baidu.com/s/1TBgJqJ5gpyg8UXIKxk2UMA 扫码下面二维码关注公众号回复100014 获取分享码 ...
- Android版OpenCV图像处理技术亲自验证[三]之斑点检测ColorBlobDetector
Android版OpenCV图像处理技术亲自验证[二]之斑点检测ColorBlobDetector 程序之美 前言 主体 运行效果 构建过程 核心代码 所遇问题 结束语 程序之美 前言 OpenCV是 ...
- 优秀Android开发简历都是这么写,你学会也可以进大厂
最近收了很多程序员的简历,工作经验从1年到十几年不等.发现一个问题,工作经验范围差不多的程序员,简历看起来也差不多- 为啥程序员的简历如此统一?正好最近看到一个分享也分析了这个问题,结合我个人的一些经 ...
- android 校讯通 源码,校讯通Android版使用说明.doc
校讯通Android版使用说明 说明: 以下截图均来自PC模拟器,实际效果会根据手机的Android系统版本高低,像素高低,分辨率大小,屏幕尺寸大小而有所差异,最终效果以自身手机为准! 下载校讯通An ...
- Android开发实战三之导入现有Android工程项目
选择Create project from existing sample 打开Eclipse环境后,在左上方的菜单上选择[File->New->Project],会弹出[New Proj ...
- 看得见的数据结构Android版之数组表(数据结构篇)
零.前言: 一讲到装东西的容器,你可能习惯于使用ArrayList和数组,你有想过ArrayList和数组的区别吗? Java的类起名字都不是随便乱起的,一般前面是辅助,后面是实质:ArrayList ...
- 还是俄罗斯方块之android版
前面的,口水话 请直接跳过. 虽然现在不比以前了 也没多少人气了,放到首页 都不到几百的点击量.也许博客园整体水平也是在往水的方向发展.不谈那些了,哥也曾经辉煌过 有过一天上千的点击量 ,哥也曾经有过 ...
最新文章
- OpenCV图像旋转的原理与技巧
- Natural 自然语言处理(NLP)「全解析」
- mysql5.5以上开启慢查询
- 右键助手1.0正式版
- vuejs滚动条_vuescroll-一款基于vuejs2.x的虚拟滚动条
- python段子_Python爬取内涵段子里的段子
- Anaconda安装(ubuntu 14.04.03 LTS 64bit)
- poj 1502 MAPMaelstrom 单源最短路dijkstra
- C++ 一篇文章让你知道智能指针的魅力
- 指定单元格里面的,内容发生变化,触发事件,调用VBA代码。
- 一些常用jar包作用
- Java一键多值Map 之Guava Multimap 用法简介
- 基于JSP+Servlet校园二手交易平台
- 搜索中文与外文数据库中的综述类文献
- 加权平均np.average()
- 【嵌入式Linux】开发环境搭建
- OpenJudge百炼习题解答(C++)--题4040:买书问题
- 关于python如何编写注释(包含中文)及出现SyntaxError: Non-UTF-8 code starting with ‘\xca‘ in file错误解决方案
- C++builder中输出hello
- 计算机/微机存储技术
热门文章
- C++中类的三种继承方式public(公有继承)、protected(保护继承)、private(私有继承)之间的差别(附思维导图)
- 小米笔记本装了linux后u盘启动不了,小米笔记本电脑怎么设置u盘启动
- 如何把RAR文件改成ZIP格式
- win的反义词_英语中最常见 反义词、近义词、同义词及词形转换。欢迎大家收藏...
- 微软半日游,和CSDN同学们走进名企
- 《汉魏风云》2、孙吴兵法第一传人——辛苦的天才曹操
- 用python在大麦网抢票_大麦网抢票工具系列(一)
- MSP430f149红外接收头——读任意红外遥控器键值并显示于数码管
- java微信模板消息开发,微信公众号模板消息开发小结
- 软件测试系统性总结思维导图