Android好评功能,Android自定义View实现五星好评效果
本文实例为大家分享了Android实现五星好评效果的具体代码,供大家参考,具体内容如下
这个效果想必大家都非常熟悉,那么Android如何自定义实现这种效果呢?
首先自定义属性:
下面看看具体实现:
/**
* Created by Michael on 2019/11/1.
*/
public class RatingStar extends View {
private int normalId;
private int focusId;
private Bitmap normalImg;
private Bitmap focusImg;
private int number;
private int w1;
private int h1;
private int marginLeft;
private int marginTop;
private int marginBottom;
private int marginRight;
private int height;
private int width;
private int p;
private float w0;
private int i0;
private int mGrade;
public RatingStar(Context context) {
this(context,null);
}
public RatingStar(Context context, @Nullable AttributeSet attrs) {
this(context, attrs,0);
}
public RatingStar(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
TypedArray array = context.obtainStyledAttributes(attrs,R.styleable.RatingStar);
normalId = array.getResourceId(R.styleable.RatingStar_starNormal,0);
focusId = array.getResourceId(R.styleable.RatingStar_starFocus,0);
normalImg = BitmapFactory.decodeResource(getResources(), normalId);
focusImg = BitmapFactory.decodeResource(getResources(), focusId);
number = array.getInteger(R.styleable.RatingStar_starNumber,5);
array.recycle();
i0 = -1;
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
w1 = normalImg.getWidth();
h1 = normalImg.getHeight();
//中间间隔
p = 30;
marginTop = 20;
marginBottom = 20;
marginLeft = 20;
marginRight = 20;
height = h1 + marginTop + marginBottom;
width = w1 *number+(number-1)*p +marginLeft+marginRight;
setMeasuredDimension(width, height);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
for (int i = 0; i < number; i++) {
if (i <= i0){
canvas.drawBitmap(focusImg,i*w1+marginLeft+i*p,marginTop,null);
mGrade = i+1;
}else{
canvas.drawBitmap(normalImg,i*w1+marginLeft+i*p,marginTop,null);
}
}
Log.e("msg","我被调用了!");
}
@Override
public boolean onTouchEvent(MotionEvent event) {
float x = event.getX();//相对于控件自身的距离
//event.getRawX() 相对于屏幕的距离
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_MOVE:
//case MotionEvent.ACTION_UP:
w0 = getWidth()/5;
i0 = (int) (x/w0);
//性能优化,减少onDraw()调用
if (mGrade == i0+1){
return true;
}
invalidate();
break;
}
return true;
}
}
最后看看具体布局中使用:
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:starNormal="@mipmap/star_normal"
app:starFocus="@mipmap/star_selected"
app:starNumber="5"
/>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
Android好评功能,Android自定义View实现五星好评效果相关推荐
- Android动画特效之自定义View
Android动画特效之Animator属性动画实现_Angel-杭州的博客-CSDN博客 我在百忙之中抽出宝贵时间来实现Android动画特效,也就是Android Animator动画效果 ...
- android 立体 流量球,Android自定义View——实现水波纹效果类似剩余流量球
Android自定义View--实现水波纹效果类似剩余流量球 三个点 pre ber block span 初始化 move 理解最近突然手痒就想搞个贝塞尔曲线做个水波纹效 ...
- android 清空canvas部分内容_Android自定义View实现圆形头像效果
在我们的APP中通常会遇到,展示圆形头像的需求,一般通过Glide就能实现,但是让我们做一个圆形头像,如果让我们自定义实现这种效果,该怎样做呢? 好,接下来本文通过三种方式来实现这种效果! 注意:这是 ...
- Android实现雪花特效自定义view
一.前言 这个冬天,老家一直没有下雨, 正好圣诞节,就想着制作一个下雪的特效. 圣诞祝福:平安夜,舞翩阡.雪花飘,飞满天.心与心,永相伴. 圣诞节是传统的宗教节日,对于基 督徒,那是庆祝耶稣的诞生,纪 ...
- Android 气泡动画(自定义View类)
Android 气泡动画(自定义View类) 一.前言 二.代码 1. 随机移动的气泡 2.热水气泡 一.前言 最近有需求制作一个水壶的气泡动画,首先在网上查找了一番,找到了一个文章. https:/ ...
- android远程打电话,Android打电话功能 Android实战教程第三篇之简单实现拨打电话功能...
想了解Android实战教程第三篇之简单实现拨打电话功能的相关内容吗,杨道龙在本文为您仔细讲解Android打电话功能的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:Android拨打电话 ...
- 自定义view实现水波纹效果
水波纹效果: 1.标准正余弦水波纹: 2.非标准圆形液柱水波纹: 虽说都是水波纹,但两者在实现上差异是比较大的,一个通过正余弦函数模拟水波纹效果,另外一个会运用到图像的混合模式(PorterDuffX ...
- android canvas 手写,自定义view—Canvas实现手写板和涂鸦功能
学习导航 第一节:http://blog..net/bobo8945510/article/details/53197727 -自定义View-自定义属性及引用 第二节:http://blog..ne ...
- Android 高手进阶之自定义View,自定义属性(带进度的圆形进度条)
转载请注明地址:http://blog.csdn.net/xiaanming/article/details/10298163 很多的时候,系统自带的View满足不了我们功能的需求,那么我们就需要自己 ...
最新文章
- Lesson 6. Scikit-Learn使用与进阶
- 关于Django中,实现序列化的几种不同方法
- 【图论】Tarjan 缩点
- 吴涛 :低延迟传输协议和新Codec将成为热点
- 正确获取硬盘序列号源码
- Android之把app作为独立的module导入其他项目遇到的坑
- 浙江经济职业技术学院计算机排名,浙江经济职业技术学院排名第几
- MySQL-MySQL数据类型及占用字节数
- adb指令通过uid控制_图文教程:PC利用adb工具通过CMD命令控制手机动作(备忘笔记)...
- 兼容M1芯片 Denise Audio poltergate Mac - 侧链均衡器
- 卡巴斯基离线病毒库升级办法
- 常见电子书类型及阅读器
- Windows10系统服务优化及分析(批处理)
- 4款简单实用的的服务器文件管理工具推荐
- STM8L101+si4463低功耗和自动唤醒配置
- html仿excel冻结 css,css实例:实现gridview仿excel冻结列
- 计算机替换字体怎么操作,电脑怎么更换字体-电脑更换字体的方法 - 河东软件园...
- 赴微软测试工程师必考一道笔试题目
- 教你如何做好微信营销说到微信营销
- 深入理解编译注解(三)依赖关系 apt/annotationProcessor与Provided的区别
热门文章
- 上次开源了今日热榜的 API 接口,这次直接开源热榜 GO 后端代码吧
- linux dde桌面,DDE桌面环境无法使用Fcitx
- WinKawaks使用技巧
- 华为认证 | HCIE的数通和安全,哪个方向好?
- 网页游戏斩仙服务器不存在什么意思,QQ斩仙3月11日部分服务器合服公告
- java狼途折叠车,入门之选:Langtu 狼途 KY028 折叠自行车 20寸 8速
- QT5的程序打包(将QT5的工程项目打包成一个exe程序)
- java编程要求算法吗_JAVA编程
- Excel批量更改文件名
- Unity动画☀️8. 添加角色控制器、Curves、添加滑动