本文实例为大家分享了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实现五星好评效果相关推荐

  1. Android动画特效之自定义View

      Android动画特效之Animator属性动画实现_Angel-杭州的博客-CSDN博客   我在百忙之中抽出宝贵时间来实现Android动画特效,也就是Android Animator动画效果 ...

  2. android 立体 流量球,Android自定义View——实现水波纹效果类似剩余流量球

    Android自定义View--实现水波纹效果类似剩余流量球 三个点   pre   ber   block   span   初始化   move   理解最近突然手痒就想搞个贝塞尔曲线做个水波纹效 ...

  3. android 清空canvas部分内容_Android自定义View实现圆形头像效果

    在我们的APP中通常会遇到,展示圆形头像的需求,一般通过Glide就能实现,但是让我们做一个圆形头像,如果让我们自定义实现这种效果,该怎样做呢? 好,接下来本文通过三种方式来实现这种效果! 注意:这是 ...

  4. Android实现雪花特效自定义view

    一.前言 这个冬天,老家一直没有下雨, 正好圣诞节,就想着制作一个下雪的特效. 圣诞祝福:平安夜,舞翩阡.雪花飘,飞满天.心与心,永相伴. 圣诞节是传统的宗教节日,对于基 督徒,那是庆祝耶稣的诞生,纪 ...

  5. Android 气泡动画(自定义View类)

    Android 气泡动画(自定义View类) 一.前言 二.代码 1. 随机移动的气泡 2.热水气泡 一.前言 最近有需求制作一个水壶的气泡动画,首先在网上查找了一番,找到了一个文章. https:/ ...

  6. android远程打电话,Android打电话功能 Android实战教程第三篇之简单实现拨打电话功能...

    想了解Android实战教程第三篇之简单实现拨打电话功能的相关内容吗,杨道龙在本文为您仔细讲解Android打电话功能的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:Android拨打电话 ...

  7. 自定义view实现水波纹效果

    水波纹效果: 1.标准正余弦水波纹: 2.非标准圆形液柱水波纹: 虽说都是水波纹,但两者在实现上差异是比较大的,一个通过正余弦函数模拟水波纹效果,另外一个会运用到图像的混合模式(PorterDuffX ...

  8. android canvas 手写,自定义view—Canvas实现手写板和涂鸦功能

    学习导航 第一节:http://blog..net/bobo8945510/article/details/53197727 -自定义View-自定义属性及引用 第二节:http://blog..ne ...

  9. Android 高手进阶之自定义View,自定义属性(带进度的圆形进度条)

    转载请注明地址:http://blog.csdn.net/xiaanming/article/details/10298163 很多的时候,系统自带的View满足不了我们功能的需求,那么我们就需要自己 ...

最新文章

  1. Lesson 6. Scikit-Learn使用与进阶
  2. 关于Django中,实现序列化的几种不同方法
  3. 【图论】Tarjan 缩点
  4. 吴涛 :低延迟传输协议和新Codec将成为热点
  5. 正确获取硬盘序列号源码
  6. Android之把app作为独立的module导入其他项目遇到的坑
  7. 浙江经济职业技术学院计算机排名,浙江经济职业技术学院排名第几
  8. MySQL-MySQL数据类型及占用字节数
  9. adb指令通过uid控制_图文教程:PC利用adb工具通过CMD命令控制手机动作(备忘笔记)...
  10. 兼容M1芯片 Denise Audio poltergate Mac - 侧链均衡器
  11. 卡巴斯基离线病毒库升级办法
  12. 常见电子书类型及阅读器
  13. Windows10系统服务优化及分析(批处理)
  14. 4款简单实用的的服务器文件管理工具推荐
  15. STM8L101+si4463低功耗和自动唤醒配置
  16. html仿excel冻结 css,css实例:实现gridview仿excel冻结列
  17. 计算机替换字体怎么操作,电脑怎么更换字体-电脑更换字体的方法 - 河东软件园...
  18. 赴微软测试工程师必考一道笔试题目
  19. 教你如何做好微信营销说到微信营销
  20. 深入理解编译注解(三)依赖关系 apt/annotationProcessor与Provided的区别

热门文章

  1. 上次开源了今日热榜的 API 接口,这次直接开源热榜 GO 后端代码吧
  2. linux dde桌面,DDE桌面环境无法使用Fcitx
  3. WinKawaks使用技巧
  4. 华为认证 | HCIE的数通和安全,哪个方向好?
  5. 网页游戏斩仙服务器不存在什么意思,QQ斩仙3月11日部分服务器合服公告
  6. java狼途折叠车,入门之选:Langtu 狼途 KY028 折叠自行车 20寸 8速
  7. QT5的程序打包(将QT5的工程项目打包成一个exe程序)
  8. java编程要求算法吗_JAVA编程
  9. Excel批量更改文件名
  10. Unity动画☀️8. 添加角色控制器、Curves、添加滑动