我正在尝试将 ProgressBar 作为类似计量的显示。我原以为这是一项容易的任务,并认为 ProgressBar 有一个可以设置为垂直的属性,但我没有看到任何东西。
此外,我希望能够在条形图的侧面显示标尺样式的指示器,以清晰地指示当前水平。
欢迎提供指引 - 谢谢!
我正在尝试将 ProgressBar 作为类似计量的显示。我原以为这是一项容易的任务,并认为 ProgressBar 有一个可以设置为垂直的属性,但我没有看到任何东西。
此外,我希望能够在条形图的侧面显示标尺样式的指示器,以清晰地指示当前水平。
欢迎提供指引 - 谢谢!
<ProgressBar
android:id="@+id/battery_pb"
android:rotation="270"
android:progress="100"
...
/>
简单的进度条图片视图
示例
viewHolder.proBarTrueImage.setMaximalValue(147);
viewHolder.proBarTrueImage.setLevel(45);
viewHolder.proBarTrueImage.setColorResource(R.color.corner_blue);
public class ProgressImageView extends ImageView {
private Context mContext;
private Paint paint;
private RectF rectf;
private int maximalValue = 1;
private int level = 0;
private int width;
private int height;
public ProgressImageView(Context context) {
super(context);
init(context, null, 0);
}
public ProgressImageView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context, attrs, 0);
}
public ProgressImageView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context, attrs, defStyleAttr);
}
private void init(Context context, AttributeSet attrs, int defStyleAttr){
mContext = context;
paint = new Paint();
rectf = new RectF();
paint.setColor(Color.GRAY);
paint.setStyle(Paint.Style.FILL);
};
@Override
protected void onDraw(Canvas canvas) {
float dif = (float) height / (float) maximalValue;
int newHeight = height - (int) (dif * level);
rectf.set(0,newHeight, width, height);
canvas.drawRect(rectf, paint);
super.onDraw(canvas);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
this.width = w;
this.height = h;
}
public void setMaximalValue(int maximalValue) {
this.maximalValue = maximalValue;
invalidate();
}
public void setLevel(int level) {
this.level = level;
invalidate();
}
public void setColorResource(int color) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
color = mContext.getResources().getColor(color,mContext.getTheme());
}else {
color = mContext.getResources().getColor(R.color.corner_blue);
}
setColor(color);
}
public void setColor(int color){
if (paint != null){
paint.setColor(color);
invalidate();
}
}
}
要创建一个垂直进度条,我解决的方法是先将其旋转90度,然后根据手动输入的值进行缩放。
scaleX = layout_height/layout_width
这是我在进度条上使用的属性示例:
android:layout_width="20dp"
android:layout_height="233dp"
android:rotation="-90"
android:scaleX="11.65"
这可能有点繁琐,但因为默认情况下它们没有垂直进度条,所以这对我来说是一个相当不错的解决方法。scaleX可以自动计算,但必须在屏幕上绘制所有内容之后才能进行。
**看看这个链接,我试图使用类似的东西,你也可以使用步进器来满足你的需求,在Github上有一些关于如何在Android Studio中使用步进器的项目可供参考**
默认情况下不支持垂直进度条。