自定义会员等级控件

最近需要做一个类似于淘宝平台会员等级的动态效果 度娘并没有给出想要的东西,于是乎,自己动手做了一个

先上效果图

这里写图片描述
先谈谈主要的思路
1.先把需要的图标画在屏幕的指定位置,当然,这个需要自己去计算和调节

2.让他动起来并且不会有卡顿的感觉 这个问题很简单,在Activity中new 一个线程 每隔40ms时间发送一个Message,message里面包含需要移动距离,并且调用View的postInvalidate()方法,重新绘制View,在Handler里面判断控件的位置,在指定范围内去改变控件的位置即可!

3.至于颜色的更换 我的做法是在底层防止有颜色的背景图,上面放置同样大小的灰色图片,不停去改变灰色图片的位置即可。

好,接下来上代码
当然 图片文件需要各位自己去添加 并且我在这里有去计算屏幕的像素密度。后面贴出来

下面是控件的代码 继承View 所有代码都是在 onDraw方法中 当然,你也可以把计算的部分放在onMeasure方法里面

import android.app.Activity;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;

import com.azt.common.utils.CommonUtil;

public class MyLevelView extends View {

private Context context;
//总长度 ,各个等级的对应长度,当前位置
private int totalLength, levelLength, currentLength;
//
private int totalLevel = 5, cunrrentLevel;
public final static int LEVEL0 = 208, LEVEL1 = 552, LEVEL2 = 828, LEVEL3 = 1104, LEVEL4 = 1380, LEVEL5 = 1656;
private float level0, level1, level2, level3, level4, level5;
//等级图标位置
private float gradeY;
//文字位置
private float textY = 0;
//头像照片位置
private float headY = 0;
//等级图标位置
private float gradeX;
private final static String STR_LEVEL0 = "0", STR_LEVEL1 = "300", STR_LEVEL2 = "1300", STR_LEVEL3 = "3300", STR_LEVEL4 = "8300", STR_LEVEL5 = "18300";
public int level = 0;
private Bitmap headImage;
private float denistyX, denistyY;

private Paint paint = new Paint();

public MyLevelView(Context context) {
    this(context, null);
}

public MyLevelView(Context context, AttributeSet attrs) {
    this(context, attrs, 0);
}

public MyLevelView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    this.context = context;
    denistyX = CommonUtil.getAdapterRatio((Activity) context)[0];
    denistyY = CommonUtil.getAdapterRatio((Activity) context)[1];

    level0 =  (LEVEL0 * denistyX);
    level1 =  (LEVEL1 * denistyX);
    level2 =  (LEVEL2 * denistyX);
    level3 =  (LEVEL3 * denistyX);
    level4 =  (LEVEL4 * denistyX);
    level5 =  (LEVEL5 * denistyX);
    Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.grade0_ash);
    gradeY &#
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值