【问题标题】:Determinate circular progress bar in android [duplicate]确定android中的圆形进度条[重复]
【发布时间】:2018-03-18 06:27:01
【问题描述】:

我想制作一个确定的进度条,但当前代码总是不确定

我的 XML

<ProgressBar
        android:id="@+id/progressBar3"
        style="?android:attr/progressBarStyle"
        android:layout_width="70dp"
        android:layout_height="70dp"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:layout_weight="0.07"
        android:indeterminate="false"
        android:max="100"
        android:progress="20"
        />

我的代码

holder.pb=rowView.findViewById(R.id.progressBar3);
holder.pb.setIndeterminate(false);
//holder.pb.setIndeterminateDrawable(null);
holder.pb.setProgress(50);
holder.pb.setMax(100);
holder.pb.requestLayout();

【问题讨论】:

  • 请正确解释您的问题。你对你的问题有什么期望?
  • 有人把问题编辑错了,,,,对不起,,,,我想做一个确定的进度条但是当前的代码总是不确定
  • 那么循环怎么办?
  • stackoverflow.com/questions/21333866/… 这可能对你有帮助
  • @sarath19 是的,它有效)我该如何投票

标签: java android


【解决方案1】:

这是我对循环进度视图的实现。 (是否支持将其值绑定到 TextView)

适用于 Android 16+(或更低版本未测试)

设置总计和进度。

重要的是 THIS VIEW 不会自行测量,因此您需要提供一些正方形属性,例如 width=100dp height=100dp

package app.view;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.view.View;
import android.widget.TextView;

/**
 * Created by MarcosVasconcelos on 28/07/2017.
 */
public class CircularProgressView extends View {
    private final float strokeWidth;
    private Paint totalPaint, progressPaint;
    private float progress = 360;
    private float total = 360;
    public TextView textView;

    public CircularProgressView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);

        strokeWidth = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 8, context.getResources().getDisplayMetrics());

        totalPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        totalPaint.setStyle(Paint.Style.STROKE);
        totalPaint.setColor(Color.parseColor("#CCCCCC"));
        totalPaint.setStrokeWidth(strokeWidth);

        progressPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        progressPaint.setStyle(Paint.Style.STROKE);
        progressPaint.setColor(Color.GREEN);
        progressPaint.setStrokeWidth(strokeWidth);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        canvas.save();

        drawProgress(canvas, (int) 360f, totalPaint);
        if(total != 0 && progress != 0)
            drawProgress(canvas, total == progress ? 360 : (int) ((360f / total) * progress), progressPaint);

        canvas.restore();
    }

    private void drawProgress(Canvas canvas, int total, Paint paint) {
        canvas.drawArc(new RectF(strokeWidth, strokeWidth, getWidth() - strokeWidth, getHeight() - strokeWidth), -90, total, false, paint);
    }

    public void setProgress(int progress) {
        this.progress = progress;
        invalidate();
    }

    public void setProgressColor(int rgb) {
        progressPaint.setColor(rgb);
        invalidate();
    }

    public void setTotal(int total) {
        this.total = total;
        if(textView != null)
            textView.setText(String.valueOf(total));
        invalidate();
    }

    public void setTotalTextView(TextView view) {
        this.textView = view;
        textView.setText(String.valueOf((int)total));
    }
}

【讨论】:

  • "package br.gov" - 你确定你可以分享吗
  • 大声笑,解决方案没有业务逻辑,我只是​​删除了包声明
  • 大声笑,如果你这么确定你可以分享它,你为什么要编辑它
  • 因为它与问题无关;)
猜你喜欢
  • 2016-06-03
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-25
  • 2018-07-12
  • 1970-01-01
相关资源
最近更新 更多