Android:椭圆形看起来很糟糕

时间:2016-04-30 17:51:11

标签: java android

我有一个椭圆形背景的按钮,它看起来不像一个完美的圆圈,我可以注意到在每个距离“打破”马戏团,这就是它的样子

enter image description here

背景:

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

<solid android:color="#7eadb6"/>
<size android:height="80dp"
    android:width="80dp"/>

修改:创建按钮

static Button theButton1;
final LinearLayout.LayoutParams params = new LinearLayout.LayoutParams
            (80, 80);

theButton1 = new Button(getActivity());
theButton1.setBackgroundResource(R.drawable.subject_button);
theButton1.setLayoutParams(params);
theButton1.setTextColor(Color.parseColor("#ffffff"));
theButton1.setTextSize(23);
theButton1.setText(prefs.getString("text1", "").substring(0, 1));
theButton1.setOnClickListener(this);

这是正常的吗?如果没有,我该如何解决?

注意:我创建了多个按钮

5 个答案:

答案 0 :(得分:1)

这可能是一个消除锯齿的问题。您必须为其禁用硬件加速。试试这个 -

<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>

<强>更新

您还必须将按钮的图层类型设置为软件。

theButton1.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

设置布局参数后。

答案 1 :(得分:1)

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

通过阅读你的评论,我知道你最终想要实现这样的目标

enter image description here

上面有文字的圆圈。

您可以使用TextDrawable Library

轻松实现目标

现在回到你的问题,问题肯定只是因为抗锯齿。在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;
}

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

答案 2 :(得分:0)

<强>更新 只需更新xml文件中的Button,如下所示:

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

保持activity

theButton1 = new Button(getActivity());
theButton1.setBackgroundResource(R.drawable.subject_button);
theButton1.setTextColor(Color.parseColor("#ffffff"));
theButton1.setTextSize(23);
theButton1.setText(prefs.getString("text1", "").substring(0, 1));
theButton1.setOnClickListener(this);

答案 3 :(得分:0)

我不认为你的实施有问题。 但尝试在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"
/>

答案 4 :(得分:0)

drawable没有问题。

  

ovelshape.xml

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

    <solid android:color="#7eadb6"/>

在XML中,您需要提供高度和宽度。 dp的宽度。并使用View而不是Button。我不是为什么,但它对我有用。

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