我有一个椭圆形背景的按钮,它看起来不像一个完美的圆圈,我可以注意到在每个距离“打破”马戏团,这就是它的样子
背景:
<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);
这是正常的吗?如果没有,我该如何解决?
注意:我创建了多个按钮
答案 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)
错误的问题导致错误答案!!!
通过阅读你的评论,我知道你最终想要实现这样的目标
上面有文字的圆圈。
您可以使用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"/>