注:下文中SettingItemView源代码(由于涉及信息安全,个人私密博客,与本文总结的进度条并没有多少关联,仅供自己review)
需求简单描述:
在项目中有多个自定义的卡片SettingItemView(也是一个自定义View),其中一个卡片中要使用到一个竖直的进度条。
我们这边要实现的,就是设计一个自定义的竖直进度条,并且只在这一个卡片中显示出来。
这边需要
(1)自定义一个VerticalSeekBar.java文件
(2)在values文件中的color.xml和attrs.xml中添加(1)中需要的对应属性
(3)在卡片的xml中放入自定义的VerticalSeekBar,调整位置及visivility等属性。
(这边就是放入自定义的卡片SettingItemView对应的setting_item.xml中,因为后续需要总结的开发过程中的问题还会涉及到这个卡片,所以这边提一下)
综上,核心代码就是VerticalSeekBar.java,color.xml和attrs.xml,然后就可以把自定义的VerticalSeekBar直接在需要的卡片的xml文件中直接应用即可。
先直接放代码:
(1)VerticalSeekBar.java
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import androidx.annotation.Nullable;
public class VerticalSeekBar extends View {
int maxValue;
int minValue;
int currentValue;
int count;
float eachHeight;
float yCoordinate;
Paint backgroundPaint;
OnChangeListener listener;
public VerticalSeekBar(Context context) {
this(context, null);
}
public VerticalSeekBar(Context context, @Nullable AttributeSet attrs) {
this(context, attrs, 0);
}
public VerticalSeekBar(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.VerticalSeekBar);
maxValue = typedArray.getInteger(R.styleable.VerticalSeekBar_max_value, 7);
minValue = typedArray.getInteger(R.styleable.VerticalSeekBar_min_value, 1);
currentValue = minValue;
backgroundPaint = new Paint();
backgroundPaint.setColor(getResources().getColor(R.color.grey1));
backgroundPaint.setAntiAlias(true);
typedArray.recycle();
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int widthMode = MeasureSpec.