我想做一个button圆角.有没有一种简单的方法可以在Android中实现这一目标?
如何以编程方式创建此形状?
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:padding="10dp"
android:shape="rectangle">
<solid android:color="#e67e22"/>
<corners
android:topLeftRadius="0dp"
android:topRightRadius="0dp"
android:bottomLeftRadius="5dp"
android:bottomRightRadius="5dp"/>
</shape>
Run Code Online (Sandbox Code Playgroud)
我尝试过这个简单的功能,可以获得角落,颜色和设置形状:
LinearLayout linearLayout = (LinearLayout) findViewById(R.id.category_header);
GradientDrawable drawable = (GradientDrawable) linearLayout.getDrawable();
float[] values = { 0.2f, 0.2f, 0.2f, 0.2f };
drawable.setCornerRadii(values);
Run Code Online (Sandbox Code Playgroud)
但我得到了这个错误:
对于LinearLayout类型,方法getDrawable()未定义
我想知道是否有人知道如何在Facebook Android应用程序中创建类似Facebook的弹出视图以供评论.
这就是我的意思:

除了可以拖动以解除它的句柄,它是一个原生的Android UI控件还是Facebook自己实现了这个?
我正在尝试实现一个使用圆角绘制自己的LinearLayout子类.根据我的研究,我设置setWillNotDraw(false)并覆盖onDraw()在画布上绘制一个圆角矩形:
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
int sc = canvas.saveLayer(0, 0, getWidth(), getHeight(), drawPaint, Canvas.MATRIX_SAVE_FLAG | Canvas.CLIP_SAVE_FLAG | Canvas.HAS_ALPHA_LAYER_SAVE_FLAG
| Canvas.FULL_COLOR_LAYER_SAVE_FLAG | Canvas.CLIP_TO_LAYER_SAVE_FLAG);
canvas.drawRoundRect(bounds, mCornerRadius, mCornerRadius, roundPaint);
canvas.restoreToCount(sc);
}
Run Code Online (Sandbox Code Playgroud)
哪里:
drawPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
drawPaint.setColor(0xffffffff);
drawPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
roundPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
roundPaint.setColor(0xffffffff);
Run Code Online (Sandbox Code Playgroud)
DST_IN这里似乎是正确的选择(根据APIDemos示例),但应该是透明的区域(圆形的)具有黑色背景,并且子项的角仍然可见.这是使用Android 4.2.2的Galaxy Nexus的结果:

任何提示?
编辑:这是我想要实现的,抱歉photoshopping的粗糙:)

编辑2:我向GitHub添加了一个可运行的示例项目:https://github.com/venator85/RoundClippingLayout
谢谢 ;)
I'm creating a ScrollView with a FrameLayout inside. I want to design it so that only the top corners are rounded on the ScrollView. I've created a drawable shape as follows
<shape>
<solid android:color="@color/white"/>
<corners
android:bottomLeftRadius="0dp"
android:bottomRightRadius="0dp"
android:topLeftRadius="16dp"
android:topRightRadius="16dp"/>
<padding android:padding="0dp"/>
</shape>
Run Code Online (Sandbox Code Playgroud)
I've then set the following on the ScrollView
scrollView.setOutlineProvider(ViewOutlineProvider.BACKGROUND);
scrollView.setClipToOutline(true);
Run Code Online (Sandbox Code Playgroud)
When i try scrolling, the elements in my FrameLayout end up protruding through the outline of my scrollview
Excuse the drawing, but what i'm looking to achieve
However …
我有一个特定的drawable,我在我的应用程序中用作背景.它不是纯色.
现在我想为这个drawable添加圆角.
我只发现圆角可用渐变色或纯色作为背景但不是另一种可绘制的形状.
是否有另一种简单的方法可以将圆角添加到drawable中?
我想创建一个半圆/圆形图像视图.下面是我用来创建圆形图像视图的代码,但我无法创建半圆形图像(半圆)
package com.example.dynamicviews;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Shader;
import android.graphics.drawable.BitmapDrawable;
import android.util.AttributeSet;
import android.widget.ImageView;
/**
* Customized Imageview with Rounded Border and Shadow
* @author Rahul Gupta <rahulg@exzeo.com>
* @since 2014-01-01
*/
public class RoundedImageView extends ImageView
{
private int borderWidth = 2;
private int viewWidth;
private int viewHeight;
private Bitmap image;
private Paint paint;
private Paint paintBorder;
private BitmapShader shader;
public RoundedImageView(Context context)
{
super(context);
setup();
}
public …Run Code Online (Sandbox Code Playgroud) 我正在使用一个shape元素作为视图的背景,就像这个问题一样.我正在使用Android Studio,它告诉我......
Element shape doesn't have required attribute android:layout_height
Element shape doesn't have required attribute android:layout_width
代码如下:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/darkBrown"/>
<stroke android:layout_width="match_parent" android:layout_height="match_parent"/>
<corners android:radius="10dip"/>
<padding android:left="0dip" android:right="0dip" android:top="0dip" android:bottom="0dip"/>
</shape>
Run Code Online (Sandbox Code Playgroud)
基本上我的问题是:如果形状在技术上不需要这些属性,为什么会出现此错误?如何告诉android停止将其标记为错误或如何避免它?
谢谢.
已解决:原因是因为它不在drawable文件夹中.
编辑:是的我知道中风部分是不正确的.
我正在尝试创建一个具有两个背景的按钮,我的自定义背景
android:background="@drawable/background_profile_edit_button" + ?attr/selectableItemBackground```
Run Code Online (Sandbox Code Playgroud)
完整按钮:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@+id/fragprofile_constraint"
app:layout_constraintRight_toRightOf="parent"
android:layout_marginTop="8dp"
android:layout_marginEnd="16dp"
android:background="@drawable/background_profile_edit_button"
android:paddingStart="32dp"
android:paddingTop="6dp"
android:paddingEnd="32dp"
android:paddingBottom="6dp"
android:text="Edit Profile"
android:textColor="@color/colorBlackFont"
android:textSize="12sp"
android:textStyle="bold"/>
Run Code Online (Sandbox Code Playgroud)
这可以很容易地解决,android:foreground="?attr/selectableItemBackground"但是需要 api 23 而我的最小值是 19。
我还尝试了另一种在 drawable 中使用 layer-list 的方法:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape
android:shape="rectangle">
<solid android:color="@color/colorWhite" />
<stroke
android:width="1dp"
android:color="@color/dividerColor" />
<corners android:radius="3dp"/>
</shape>
</item>
<item
android:drawable="?attr/selectableItemBackground">
</item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)
此图层列表在我的更高 API 设备上完美运行。但是它导致我的 API 19 设备崩溃......
android.view.InflateException: Binary XML file line #201: Error inflating class TextView
这个人也有同样的问题,也没有得到答复:
LayerList 错误 API 19:标签需要“drawable”属性或定义可绘制对象的子标签
TLDR:_________________________________________________________
在 …