Android 按钮有背景图像时圆角不起作用
我有一个按钮在我的活动,它也有一个背景图像。我添加了选择器属性,它是工作的设置_按下和设置_聚焦。但圆角不是在默认状态的按钮,因为我已经插入了一个背景图像也。请帮我 activity_sam.xmlAndroid 按钮有背景图像时圆角不起作用,android,button,Android,Button,我有一个按钮在我的活动,它也有一个背景图像。我添加了选择器属性,它是工作的设置_按下和设置_聚焦。但圆角不是在默认状态的按钮,因为我已经插入了一个背景图像也。请帮我 activity_sam.xml <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape >
<solid android:color="#f27d0f"/>
<corners android:radius="7dp"/>
</shape>
</item>
<item android:state_focused="true">
<shape >
<solid android:color="#f27d0f"/>
<corners android:radius="7dp"/>
</shape>
</item>
<item android:state_focused="false"
android:state_enabled="true"
android:drawable="@drawable/sam_logo" >
<shape >
<corners android:radius="7dp"/>
</shape>
</item>
</selector>
将此项添加到最后一项下面
<item>
<shape>
<corners android:radius="7dp"/>
</shape>
</item>
它将作为按钮的默认样式。添加另一项以显示默认状态,如下所示:
<shape>
<corners android:radius="7dp"/>
</shape>
上面的代码将裁剪图像的边缘。如果要在图像视图上显示圆形图层。请执行以下操作
<?xml version="1.0" encoding="UTF-8"?>
我宁愿在代码中尝试类似的内容(尚未选中): 正因为如此,您可以使用MyDrawable.setCornerRadii(float[]半径),也正因为有了这张带有4个不同半径(左上、右上、左下、右下)的矩形绘制图像
- 添加与按钮大小相同的布局
- 提供背景图像,并将圆角xml设置为按钮的背景。如果有效,请接受答案
我认为这不会有什么帮助。问题不在于圆角本身,而是有背景图像的圆角。哦!可以然后他需要使用代码来裁剪图像,使其圆整。
<?xml version="1.0" encoding="UTF-8"?>
<solid android:color="#FFFFFF" />
<stroke
android:width="3dp"
android:color="#0000CC" />
<corners
android:bottomLeftRadius="5dp"
android:bottomRightRadius="5dp"
android:topLeftRadius="5dp"
android:topRightRadius="5dp" />
<padding
android:bottom="6dp"
android:left="6dp"
android:right="6dp"
android:top="6dp" />
public class MyDrawable extends PaintDrawable {
BitmapShader mShader;
Rect mRect = new Rect();
public MyDrawable(BitmapDrawable bitmapDrawable) {
super();
final BitmapShader mShader = new BitmapShader(bitmapDrawable.getBitmap(), bitmapDrawable.getTileModeX() == null ? Shader.TileMode.CLAMP : bitmapDrawable.getTileModeX(), bitmapDrawable.getTileModeY() == null ? Shader.TileMode.CLAMP : bitmapDrawable.getTileModeY());
mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setFilterBitmap(true);
mPaint.setDither(true);
mPaint.setStyle(Paint.Style.FILL);
mPaint.setShader(mShader);
}
@Override
public void draw(Canvas canvas) {
int saveCount = canvas.getSaveCount();
canvas.save();
getPadding(mRect);
canvas.translate(mRect.left, mRect.top);
getShape().draw(canvas, mPaint);
canvas.translate(-mRect.left, -mRect.top);
canvas.restoreToCount(saveCount);
}
}
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/ic_launcher"
android:orientation="vertical" >
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/top_right_left_coner"
android:text="@string/hello_world" />
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<solid android:color="@android:color/transparent" />
<stroke
android:width="1dp"
android:color="@android:color/black" />
<padding
android:bottom="1dp"
android:left="1dp"
android:right="1dp"
android:top="1dp" />
<corners
android:bottomLeftRadius="10dip"
android:bottomRightRadius="10dip"
android:topLeftRadius="10dip"
android:topRightRadius="10dip" />
</shape>