具有圆角的Android自定义组件视图

前端之家收集整理的这篇文章主要介绍了具有圆角的Android自定义组件视图前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用圆角(以及选择的背景颜色)创建一个可以重复使用不同背景颜色的视图;很难解释,所以这是我的代码

/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

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:ny="http://schemas.android.com/apk/res/com.packagename.whatever"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#ffffff"
    android:padding="10dp">

    <com.packagename.whatever.CustomDrawableView
        android:id="@+id/custom"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:background="#b80010"
        ny:radius="50"
    />

</LinearLayout>

我想要红色的盒子有50px的圆角,但正如你所看到的,它不会:

我的想法是,我可以轻松地更改XML中的背景颜色,并自动拥有一个带圆角的漂亮视图,而无需创建多个drawable.

谢谢您的帮助!

解决方法

您需要将角半径和颜色设置为背景可绘制.

这是一种可行的方法.抓住你在android:background中设置的颜色,然后用它来创建一个你在构造函数中设置为背景的新drawable.只要您将android:background设置为颜色值,这将起作用.

public CustomDrawableView(Context context,attrs);
        init(attrs);

        // pull out the background color
        int color = attrs.getAttributeIntValue("http://schemas.android.com/apk/res/android","background",0xffffffff);

        // create a new background drawable,set the color and radius and set it in place
        mDrawable = new PaintDrawable();
        mDrawable.getPaint().setColor(color);
        mDrawable.setCornerRadius(radius);
        setBackgroundDrawable(mDrawable);
    }

如果覆盖onDraw,请确保首先调用super.onDraw(canvas)以获取背景.

原文链接:https://www.f2er.com/android/317325.html

猜你在找的Android相关文章