맞춤 설정 상태에 따라 캔버스에 페인팅 할 때 사용할 색상을 정의하고 싶습니다.Android : 선택기를 사용하여 맞춤 색상 속성 업데이트
고해상도/레이아웃 /은 content.xml에서가 :
<resource>
<declare-styleable name="MyView">
<attr name="primary_color" format="reference"/>
</declare-styleable>
</resource>
my_selector :
<com.example.package.MyView
app:primary_color="@drawable/my_selector"
/>
primary_color는 고해상도/값/attrs.xml이에 정의 된 사용자 지정 특성입니다 이것은 내가 가지고 얼마나 멀리입니다 res/drawable/my_selector.xml에 정의되어 있습니다.
<selector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res/com.example.package">
<item
app:state_a="true"
android:drawable="@drawable/red" />
<item
app:state_b="true"
android:drawable="@drawable/orange" />
<item
app:state_c="true"
android:drawable="@drawable/red" />
</selector>
빨강, 오렌지 및 빨강은 res/values / colordrawab에 정의되어 있습니다. le.xml는 :
<resources>
<drawable name="red">#f00</drawable>
<drawable name="orange">#fb0</drawable>
<drawable name="green">#0f0</drawable>
</resources>
MYVIEW에서 나는이 당김 얻을 수 있습니다 :
setBackground(primaryColor);
그러나 I :
StateListDrawable primaryColor;
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
try{
primaryColor = (StateListDrawable) a.getDrawable(
R.styleable.MyView_primary_color);
}finally {
a.recycle();
}
}
primaryColor가 다른 상태에서 제대로 업데이트, 나는 호출하여 테스트 할 수 있습니다 페인트와 함께이 색상을 사용하려면 다음과 같이하십시오.
paint.setColor(primaryColor);
하지만 분명히 허용되지 않습니다. primaryColor를 getColor() 메서드가있는 ColorDrawable으로 변환하려고했지만 가능한 경우이를 수행하는 방법을 알아낼 수 없습니다.
선택기에서보기에서 사용할 수있는 색상을 얻는 방법에 대한 제안은 훌륭합니다.