Android自定义组件视图w/圆角

6 浏览
0 Comments

Android自定义组件视图w/圆角

我正在尝试创建一个带有圆角(和自定义背景颜色)的View,我希望能够在不同的背景颜色下重复使用;很难解释,所以这是我的代码:

/app/src/com/packagename/whatever/CustomDrawableView.java

package com.packagename.whatever;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.drawable.PaintDrawable;
import android.util.AttributeSet;
import android.view.View;
public class CustomDrawableView extends View {
    private PaintDrawable mDrawable;
    int radius;
    private void init(AttributeSet attrs) {
        TypedArray a = getContext().obtainStyledAttributes(attrs,R.styleable.RoundedRect);
        radius = a.getInteger(R.styleable.RoundedRect_radius, 0);
    }
    public CustomDrawableView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(attrs);
        mDrawable = new PaintDrawable();
    }
    protected void onDraw(Canvas canvas) {
        mDrawable.setCornerRadius(radius);
        mDrawable.draw(canvas);
    }
}

这是显示自定义组件的XML:

/app/res/layout/test.xml



    

我想要红色框有50像素的圆角,但是如你所见,它没有:

Red box without rounded corners

这个想法是,我可以在XML中轻松更改背景颜色,并自动获得一个带有圆角的漂亮视图,而无需创建多个可绘制对象。

感谢帮助!

0
0 Comments

在Android中,当我们想要为自定义组件视图添加圆角时,可能会遇到以下问题。以下是问题的出现原因和解决方法。

问题原因:

问题出现的原因是我们想要为自定义组件视图添加圆角,但是我们可能不知道如何实现。

解决方法:

我们可以通过以下步骤来解决这个问题:

1. 首先,我们可以创建一个简单的ShapeDrawable,代码如下:

public ShapeDrawable Sd(int s){
    float[] outerR = new float[] { 12, 12, 12, 12, 12, 12, 12, 12 };
    ShapeDrawable mDrawable = new ShapeDrawable(new RoundRectShape(outerR, null,null));
    mDrawable.getPaint().setColor(s);
    return mDrawable;
}

其中,上述代码中的"12"表示圆角的半径。

2. 然后,我们可以将创建的ShapeDrawable应用于任何视图的背景。例如,我们可以将其应用于LinearLayout的背景,代码如下:

LinearLayout l=(LinearLayout) findViewById(R.id.testLayout);
l.setBackgroundDrawable(Sd(0xff74AC23));

其中,"testLayout"是LinearLayout的ID,"0xff74AC23"是背景颜色。

3. 如果我们已经对按钮进行了颜色设置,并且需要将按钮的角变成圆角,我们可以使用以下代码:

Resources res = this.getResources();
button2.setBackgroundDrawable(this.Sd(res.getColor(R.color.color1x2)));

其中,"button2"是按钮的ID,"R.color.color1x2"是颜色资源。

通过以上步骤,我们可以实现在Android自定义组件视图中添加圆角的效果。

0
0 Comments

问题的原因是:用户想要通过XML动态设置背景颜色,但是现有的方法只允许设置静态背景颜色,所以需要寻找一个允许一次性在XML中设置背景颜色的解决方案。

解决方法是:通过查看提供的链接,可以找到一个解决方法。用户可以创建一个自定义的组件视图,并在其中使用XML调用来设置圆角背景。这样就能实现在XML中一次性设置背景颜色的需求。

0
0 Comments

问题的出现原因:没有正确设置自定义组件的圆角和颜色。

解决方法:在背景绘制中设置圆角和颜色。以下是一种可行的方法。首先获取在android:background中设置的颜色,然后使用这个颜色创建一个新的drawable,并在构造函数中将其设置为背景。只要将android:background设置为颜色值,这种方法就能够正常工作。

public CustomDrawableView(Context context, AttributeSet attrs) {
    super(context, attrs);
    init(attrs);
    // 获取背景颜色
    int color = attrs.getAttributeIntValue("http://schemas.android.com/apk/res/android", "background", 0xffffffff);
    // 创建新的背景drawable,并设置颜色和半径,然后设置为背景
    mDrawable = new PaintDrawable();
    mDrawable.getPaint().setColor(color);
    mDrawable.setCornerRadius(radius);
    setBackgroundDrawable(mDrawable);
}

如果重写了onDraw方法,请确保首先调用super.onDraw(canvas)以绘制背景。

0