自定义会员等级控件

这篇博客介绍如何创建类似淘宝会员等级的动态效果。作者通过计算图标位置、使用线程平滑移动以及处理颜色变化来实现。关键代码包括自定义View的onDraw方法、Activity的Handler以及线程更新,同时讨论了Android的适配问题和解决策略。
摘要由CSDN通过智能技术生成

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

先上效果图

这里写图片描述
先谈谈主要的思路
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
    评论
Android提供了ProgressBar控件用于显示进度条,可通过设置样式和属性实现不同的进度条效果。以下是一个简单的示例: 首先,在布局文件中添加ProgressBar控件: ```xml <ProgressBar android:id="@+id/progressBar" android:layout_width="match_parent" android:layout_height="wrap_content" style="?android:attr/progressBarStyleHorizontal" android:max="100" android:progress="0" android:progressDrawable="@drawable/custom_progressbar" /> ``` 其中,style定义了进度条的样式,max定义了最大进度值,progress定义了当前进度值,progressDrawable指定了进度条的外观。 接着,在代码中获取ProgressBar控件的引用,并设置进度值: ```java ProgressBar progressBar = findViewById(R.id.progressBar); progressBar.setProgress(50); ``` 这里将进度值设置为50,即50%的进度。如果想要动态改变进度值,可以使用ProgressBar的setProgress方法。 最后,可以自定义进度条的外观,如修改进度条的颜色、形状等。这可以通过自定义Drawable来实现。以下是一个自定义Drawable的示例: ```xml <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <corners android:radius="10dp" /> <gradient android:startColor="#FF4081" android:centerColor="#FF4081" android:endColor="#F06292" android:angle="270" /> </shape> ``` 将上述代码保存为custom_progressbar.xml文件,然后将其指定为进度条的progressDrawable即可。 ```xml android:progressDrawable="@drawable/custom_progressbar" ``` 这样就可以自定义进度条的外观了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值