Android Custom Component View с закругленными углами - PullRequest
7 голосов
/ 29 апреля 2011

Я пытаюсь создать вид с закругленными углами (и цвет фона на выбор), который я могу использовать с разными цветами фона;трудно объяснить, поэтому вот мой код:

/ app / src / com / packagename / что угодно / 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, но, как вы увидите, он делаетне:

Red box without rounded corners

Идея состоит в том, что я мог бы легко изменить цвет фона в XML и автоматически получить красивый вид с закругленными углами без необходимости создавать несколько рисованных элементов.

Спасибо за помощь!

Ответы [ 3 ]

8 голосов
/ 29 апреля 2011

Вам нужно установить свой угловой радиус и цвет в качестве фона для рисования.

Вот один способ, который будет работать. Возьмите цвет, который вы установили в android: background, затем используйте его, чтобы создать новый чертеж, который вы установили в фоновом режиме в конструкторе. Это будет работать до тех пор, пока вы установите в качестве значения цвета для Android: background.

   public CustomDrawableView(Context context, AttributeSet attrs) {
        super(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), чтобы нарисовать фон.

3 голосов
/ 29 апреля 2011

при условии простого рисования, например:

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;
}

Вы можете сделать следующее:

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

, где 12 представляют радиус.Вы можете применить это к любому виду фона для рисования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...