我有一个自定义视图,只是在画布上绘制一个圆圈(到目前为止)。 在RelativeLayout中使用它是好的,直到我告诉它具体在RelativeLayout中对齐的位置。
即。一旦我添加如下内容:android:layout_centerInParent =" true" 它将不再出现。
以下是相关代码:
public class CircleProgressBar extends ProgressBar {
int radius;
float centerX;
float centerY;
Paint progressPaint;
public CircleProgressBar(Context context) {
super(context);
init(context);
}
public CircleProgressBar(Context context, AttributeSet attrs) {
super(context, attrs);
init(context, attrs);
}
public CircleProgressBar(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context, attrs);
}
private void init(Context context) {
progressPaint = new Paint();
progressPaint.setColor(ContextCompat.getColor(context, R.color.colorAccent));
}
private void init(Context context, AttributeSet attributeSet) {
progressPaint = new Paint();
progressPaint.setColor(ContextCompat.getColor(context, R.color.colorAccent));
}
@Override
protected synchronized void onDraw(Canvas canvas) {
radius = Math.max(getMeasuredWidth(), getWidth()) / 2;
centerX = getLeft() + radius;
centerY = getTop() + radius;
canvas.drawCircle(centerX, centerY, radius, progressPaint);
}
}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.example.tomtaila.circleprogressbar.CircleProgressBar
android:layout_centerInParent="true"
android:layout_width="100dp"
android:layout_height="100dp"/>
</RelativeLayout>
答案 0 :(得分:0)
试试这样。这将解决您的问题
从“CircleProgressBar”中删除“android:layout_centerInParent =”true“” 将“android:gravity =”center“”设置为“activity_main”RelativeLayout
OR
@Override
protected synchronized void onDraw(Canvas canvas) {
radius = Math.max(getMeasuredWidth(), getWidth()) / 2;
centerX = radius;
centerY = radius;
canvas.drawCircle(centerX, centerY, radius, progressPaint);
}
虽然CircleProgressBar标签没有centerInParent属性,但它的位置是左上角(0,0)。所以在“onDraw”方法中你使用getLeft()返回0并且getTop()返回0。
但是CircleProgressBar标签带有centerInParent属性,它的位置是父级的中心(parent_width / 2,parent_height / 2)。因此在“onDraw”方法中,getLeft()将返回parent_width / 2()(如果父宽度为480,则返回240)并且simmilarlly getTop()将返回parent_height / 2。现在centerX,centerY值变得太大。