हालांकि @AbAppletic जवाब अच्छा है, मैं समस्या को हल करने का एक और तरीका जोड़ना चाहते हैं। आप जावा में एक सर्कल व्यू को परिभाषित कर सकते हैं और फिर अपने एक्सएमएल लेआउट में इस बार कई बार उपयोग कर सकते हैं और अपनी इच्छानुसार अपना रंग बदल सकते हैं। द सर्कल दृश्य: कई बार उनकी पृष्ठभूमि
<declare-styleable name="Circle">
<attr name="circleRadius" format="integer"/>
<attr name="circleColor" format="color" />
</declare-styleable>
और फिर आप अपने लेआउट में इस दृश्य का उपयोग कर सकते हैं, यह भी आप बदल सकते हैं:
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<TableRow android:gravity="center">
<com.afranet.broadbandportal.view.Circle xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/cv"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="5dp"
android:background="@color/colorPrimary"
app:circleColor="@color/color1" />
<com.afranet.broadbandportal.view.Circle xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/cv2"
android:layout_width="120dp"
android:layout_height="120dp"
android:layout_margin="5dp"
android:background="@color/colorPrimary"
app:circleColor="@color/color2" />
</TableRow>
<TableRow android:gravity="center">
<com.afranet.broadbandportal.view.Circle xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/cv3"
android:layout_width="120dp"
android:layout_height="120dp"
android:layout_margin="5dp"
android:background="@color/colorPrimary"
app:circleColor="@color/color3" />
<com.afranet.broadbandportal.view.Circle xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/cv4"
android:layout_width="120dp"
android:layout_height="120dp"
android:layout_margin="5dp"
android:background="@color/colorPrimary"
app:circleColor="@color/color4" />
</TableRow>
<TableRow android:gravity="center">
<com.afranet.broadbandportal.view.Circle xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/cv5"
android:layout_width="120dp"
android:layout_height="120dp"
android:layout_margin="5dp"
android:background="@color/colorPrimary"
app:circleColor="@color/color5" />
<com.afranet.broadbandportal.view.Circle xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/cv6"
android:layout_width="120dp"
android:layout_height="120dp"
android:layout_margin="5dp"
android:background="@color/colorPrimary"
app:circleColor="@color/color6" />
</TableRow>
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;
public class Circle extends View {
Paint p;
int color ;
public Circle(Context context) {
this(context, null);
}
public Circle(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public Circle(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// real work here
TypedArray a = context.getTheme().obtainStyledAttributes(
attrs,
R.styleable.Circle,
0, 0
);
try {
color = a.getColor(R.styleable.Circle_circleColor, 0xff000000);
} finally {
// release the TypedArray so that it can be reused.
a.recycle();
}
init();
}
public void init()
{
p = new Paint();
p.setColor(color);
}
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
if(canvas!=null)
{
canvas.drawCircle(getHeight()/2, getWidth()/2,getWidth()/2,p);
}
}
}
इन पंक्तियों attrs.xml
में जोड़ें
यहाँ स्क्रीनशॉट है:
स्रोत
2016-10-22 08:30:20
चेक इस पोस्ट: http://stackoverflow.com/questions/40183852/defined-custom-shape-for-button-in-xml-now-i-want-to-change-the-color-dynamical –
यह [पोस्ट] देखें (http://stackoverflow.com/questions/16636412/change-shape-solid-color-at-runtime-inside-drawable-xml-used-as-background)। –