Java 确定android中的循环进度条
我想做一个确定的进度条,但当前代码给出的总是不确定的 我的XMLJava 确定android中的循环进度条,java,android,Java,Android,我想做一个确定的进度条,但当前代码给出的总是不确定的 我的XML <ProgressBar android:id="@+id/progressBar3" style="?android:attr/progressBarStyle" android:layout_width="70dp" android:layout_height="70dp" android:layout_centerHorizontal="t
<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"
/>
这是我对循环进度视图的实现。(是否支持将其值绑定到TextView) 适用于Android 16+(或更低版本未经测试) 设定一个总数和一个进度 重要信息:此视图不测量自身,因此需要提供一些方形属性,如宽度=100dp高度=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));
}
}
请把你的问题解释清楚。你对你的问题有什么期望?有人把问题编辑错了,,,,,,对不起,,,我想做一个确定的进度条,但当前代码总是不确定的,那么如何处理循环?这可能会有帮助you@sarath19是的,它可以工作)我如何投票“package br.gov”-你确定你可以分享吗LOL,解决方案没有业务逻辑,我刚刚删除了package声明LOL,如果你确定你可以分享它,为什么要编辑它呢?因为它与问题无关;)
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));
}
}