खोज…


एक ड्रिबल टिंट

एक ड्रॉबल को एक निश्चित रंग का रंग दिया जा सकता है। यह आपके एप्लिकेशन के भीतर विभिन्न थीमों का समर्थन करने, और ड्रा करने योग्य संसाधन फ़ाइलों की संख्या को कम करने के लिए उपयोगी है।

एसडीके 21+ पर फ्रेमवर्क एपीआई का उपयोग करना:

Drawable d = context.getDrawable(R.drawable.ic_launcher);
d.setTint(Color.WHITE);

SDK 4+ पर android.support.v4 लाइब्रेरी का उपयोग करना:

//Load the untinted resource
final Drawable drawableRes = ContextCompat.getDrawable(context, R.drawable.ic_launcher);
//Wrap it with the compatibility library so it can be altered
Drawable tintedDrawable = DrawableCompat.wrap(drawableRes);
//Apply a coloured tint
DrawableCompat.setTint(tintedDrawable, Color.WHITE);
//At this point you may use the tintedDrawable just as you usually would 
//(and drawableRes can be discarded)

//NOTE: If your original drawableRes was in use somewhere (i.e. it was the result of 
//a call to a `getBackground()` method then at this point you still need to replace 
//the background. setTint does *not* alter the instance that drawableRes points to, 
//but instead creates a new drawable instance

कृपया नहीं कि int color किसी रंग संसाधन का जिक्र नहीं कर रहा है, हालांकि आप 'कलर' क्लास में परिभाषित उन रंगों तक सीमित नहीं हैं। जब आपके पास अपने XML में एक रंग परिभाषित होता है जिसे आप उपयोग करना चाहते हैं तो आपको सबसे पहले इसका मूल्य प्राप्त करना होगा।

आप नीचे दिए गए तरीकों का उपयोग करके Color.WHITE usages को बदल सकते हैं

पुराने API को लक्षित करते समय:

getResources().getColor(R.color.your_color);

या नए लक्ष्यों पर:

ContextCompat.getColor(context, R.color.your_color);

गोल कोनों के साथ देखें

ड्रा करने योग्य फ़ोल्डर में custom_rectangle.xml के साथ नामित योग्य फ़ाइल बनाएँ:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >

    <solid android:color="@android:color/white" />

    <corners android:radius="10dip" />

    <stroke
        android:width="1dp"
        android:color="@android:color/white" />

</shape>

अब दृश्य पर आयत पृष्ठभूमि लागू करें:

mView.setBackGround(R.drawlable.custom_rectangle);

संदर्भ स्क्रीनशॉट:

यहाँ छवि विवरण दर्ज करें

वृत्ताकार दृश्य

एक परिपत्र देखें (इस मामले में के लिए TextView ) drawble फ़ोल्डर में एक drawble round_view.xml बनाने के लिए:

<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <solid android:color="#FAA23C" />
    <stroke android:color="#FFF" android:width="2dp" />
</shape>

देखने के लिए ड्राएबल असाइन करें:

    <TextView
        android:id="@+id/game_score"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:background="@drawable/round_score"
        android:padding="6dp"
        android:text="100"
        android:textColor="#fff"
        android:textSize="20sp"
        android:textStyle="bold"
        android:gravity="center" />

अब इसे ऑरेंज सर्कल की तरह दिखना चाहिए:

यहाँ छवि विवरण दर्ज करें

कस्टम दराज

ड्राबल के साथ अपनी कक्षा बढ़ाएँ और इन तरीकों को ओवरराइड करें

public class IconDrawable extends Drawable {
    /**
     * Paint for drawing the shape
     */
    private Paint paint;
    /**
     * Icon drawable to be drawn to the center of the shape
     */
    private Drawable icon;
    /**
     * Desired width and height of icon
     */
    private int desiredIconHeight, desiredIconWidth;

    /**
     * Public constructor for the Icon drawable
     *
     * @param icon            pass the drawable of the icon to be drawn at the center
     * @param backgroundColor background color of the shape
     */
    public IconDrawable(Drawable icon, int backgroundColor) {
        this.icon = icon;
        paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        paint.setColor(backgroundColor);
        desiredIconWidth = 50;
        desiredIconHeight = 50;
    }

    @Override
    public void draw(Canvas canvas) {
        //if we are setting this drawable to a 80dpX80dp imageview 
        //getBounds will return that measurements,we can draw according to that width.
        Rect bounds = getBounds();
        //drawing the circle with center as origin and center distance as radius
        canvas.drawCircle(bounds.centerX(), bounds.centerY(), bounds.centerX(), paint);
        //set the icon drawable's bounds to the center of the shape
        icon.setBounds(bounds.centerX() - (desiredIconWidth / 2), bounds.centerY() - (desiredIconHeight / 2), (bounds.centerX() - (desiredIconWidth / 2)) + desiredIconWidth, (bounds.centerY() - (desiredIconHeight / 2)) + desiredIconHeight);
        //draw the icon to the bounds
        icon.draw(canvas);

    }

    @Override
    public void setAlpha(int alpha) {
        //sets alpha to your whole shape
        paint.setAlpha(alpha);
    }

    @Override
    public void setColorFilter(ColorFilter colorFilter) {
       //sets color filter to your whole shape
        paint.setColorFilter(colorFilter);
    }

    @Override
    public int getOpacity() {
        //give the desired opacity of the shape
        return PixelFormat.TRANSLUCENT;
    }
}

अपने लेआउट में एक ImageView घोषित करें

<ImageView
   android:layout_width="80dp"
   android:id="@+id/imageView"
   android:layout_height="80dp" />

ImageView में अपना कस्टम ड्रा करने योग्य सेट करें

 IconDrawable iconDrawable=new IconDrawable(ContextCompat.getDrawable(this,android.R.drawable.ic_media_play),ContextCompat.getColor(this,R.color.pink_300));
 imageView.setImageDrawable(iconDrawable);

स्क्रीनशॉट

यहाँ छवि विवरण दर्ज करें यहाँ छवि विवरण दर्ज करें यहाँ छवि विवरण दर्ज करें



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow