Java 安卓:椭圆形看起来很糟糕

Java 安卓:椭圆形看起来很糟糕,java,android,Java,Android,我有一个椭圆形背景的按钮,它看起来不像一个完美的圆圈,我可以注意到在圆圈的每一个距离上都有“断点”,这就是它的外观 背景: <shape android:shape="oval" xmlns:android="http://schemas.android.com/apk/res/android" > <solid android:color="#7eadb6"/> <size android:height="80dp" android:width="80

我有一个椭圆形背景的按钮,它看起来不像一个完美的圆圈,我可以注意到在圆圈的每一个距离上都有“断点”,这就是它的外观

背景:

<shape android:shape="oval"
xmlns:android="http://schemas.android.com/apk/res/android" >

<solid android:color="#7eadb6"/>
<size android:height="80dp"
    android:width="80dp"/>
这正常吗?如果没有,我如何修复它


注意:我有多个按钮是这样创建的

这可能是一个抗锯齿问题。你必须为它禁用硬件加速。试试这个-

<shape android:shape="oval"
xmlns:android="http://schemas.android.com/apk/res/android"
android:hardwareAccelerated="false"
>

<solid android:color="#7eadb6"/>
<size android:height="80dp"
    android:width="80dp"/>
</shape>
设置布局参数后。

更新 只需更新xml文件中的
按钮
,如下所示:

<Button
    android:layout_width="80dp"
    android:layout_height="80dp"
    android:text="mytext"
    android:id="@+id/button"
     />

我不认为你的实施有什么问题。 但是,请尝试使用xml进行此操作,因为在运行时执行所有这些操作时可能会导致问题。创建一个按钮并将其背景设置为可绘制的椭圆形

<Button
android:layout_width="50dp"
android:layout_height="50dp"
android:background="@drawable/oval"
android:gravity="center_vertical|center_horizontal"
android:text="button text here"
/>

可拉拔电缆没有问题

ovelshape.xml


在XML中,您需要提供dp中的高度和宽度。并使用视图而不是按钮。我不知道为什么,但这对我很有效

<View android:layout_width="50dp"
    android:layout_height="50dp"
    android:background="@drawable/ovelshape"/>

错误的问题导致错误的答案

通过阅读您的评论,我理解您最终想要实现这样的目标

上面有文字的圆圈

你可以通过使用

现在让我们回到您的问题,问题肯定只是因为抗锯齿。在l-dpi设备上,您的问题变得更加严重

诀窍是制作位图并将其作为所需视图的背景传递

public Bitmap getCircleBitmap(int dimenSize,int mColor) {
    Bitmap output = Bitmap.createBitmap(dimenSize, dimenSize, Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(output);
    int x = dimenSize;
    int y = dimenSize;
    Paint paint = new Paint();
    paint.setAntiAlias(true);
    paint.setStyle(Paint.Style.FILL);
    paint.setColor(Color.TRANSPARENT);
    canvas.drawPaint(paint);
    canvas.drawBitmap(output, 0.0f, 0.0f, paint);
    paint.setColor(mColor);
    canvas.drawCircle(x / 2, y / 2, dimenSize/2, paint);
    return output;
}

现在您有了一个锐利的圆形位图,可以轻松地使用它。

为什么使用Java?你不能在xml布局中设置它吗?这就是原因吗?你可以用一个图像来代替。我需要在上面设置文本!我通过点击另一个按钮以编程方式添加按钮您必须以编程方式更改
版面宽度
版面宽度
还是仅更改背景我有很多按钮要添加,如何将它们绑定到版面?我想这是一个与原始问题不同的问题。。但请展示更多您的活动您可以添加
settext
。。。检查我的更新答案以了解其他按钮您也可以这样做我如何将按钮的背景设置为位图?Drawable circle=new BitmapDrawable(getResources(),bitmap);现在你有了一个拖鞋。然后使用myButton.setBackground(圆圈)@库里库
<Button
android:layout_width="50dp"
android:layout_height="50dp"
android:background="@drawable/oval"
android:gravity="center_vertical|center_horizontal"
android:text="button text here"
/>
  <shape android:shape="oval"
    xmlns:android="http://schemas.android.com/apk/res/android" >

    <solid android:color="#7eadb6"/>
<View android:layout_width="50dp"
    android:layout_height="50dp"
    android:background="@drawable/ovelshape"/>
public Bitmap getCircleBitmap(int dimenSize,int mColor) {
    Bitmap output = Bitmap.createBitmap(dimenSize, dimenSize, Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(output);
    int x = dimenSize;
    int y = dimenSize;
    Paint paint = new Paint();
    paint.setAntiAlias(true);
    paint.setStyle(Paint.Style.FILL);
    paint.setColor(Color.TRANSPARENT);
    canvas.drawPaint(paint);
    canvas.drawBitmap(output, 0.0f, 0.0f, paint);
    paint.setColor(mColor);
    canvas.drawCircle(x / 2, y / 2, dimenSize/2, paint);
    return output;
}