7

カスタムビューを作成しようとしており、以下のようなスタイル属性を宣言しています:-

  <resources>
 <declare-styleable name="NewCircleView">
    <attr name="radius" format="integer"/>
    <attr name="circlecolor" format="color"/>
</declare-styleable>

 </resources> 

customview のコンストラクターでは、これらの値は次のように取得されます。

    circleradius=a.getInt(R.styleable.NewCircleView_radius, 0);//global var
    circlecolor=a.getColor(R.styleable.NewCircleView_circlecolor, 0);//global var and a is the typed array

ビューは、次のように xml を宣言することによって使用されます。

 <com.customviews.NewCircleView
        android:layout_below="@id/thetext"
        android:layout_width="match_parent"
        android:layout_height="fill_parent" 
        app:radius="10000"
        app:circlecolor="@color/black"<!--this is defined in colors.xml
      />

ペイントオブジェクトを次のように設定したときのカスタムビューで:-

thePaintObj.setColor(circlecolor);//circlecolor logs to an integer as expected

xml で定義されている「黒」という色を取得できません

ただし、色を次のように設定すると

thePaintObj.setColor(Color.GRAY)

ビューで色を取得します

誰かが私が間違っていることを教えてもらえますか?

(注:-さらにコードを投稿してほしい場合は、お知らせください)

EDIT1:-私のcolors.xmlを投稿しています。私のコードコメントでは明確ではないようです:-

<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="red">#7f00</color>
<color name="blue">#770000ff</color>
<color name="green">#7700ff00</color>
<color name="yellow">#77ffff00</color>
<color name="black">#000000</color>
 </resources>
4

2 に答える 2

13

colors.xml 内

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="black_color">#000000</color>
</resources>

取得するには

Resources res = getResources();
int color = res.getColor(R.color.black_color);

次に、ペイントする色を設定します

thePaintObj.setColor(color);

より詳しい情報 @

http://developer.android.com/guide/topics/resources/more-resources.html#Color

編集:

MyCustomView

public class CustomView extends View{

    Paint p;
    int color ;
    public CustomView(Context context) {
        this(context, null);
    }

    public CustomView(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public CustomView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        // real work here
        TypedArray a = context.getTheme().obtainStyledAttributes(
                attrs,
                R.styleable.NewCircleView,
                0, 0
        );

        try {

         color = a.getColor(R.styleable.NewCircleView_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(100, 100,30,p );
        }
    }

}

attrs.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
     <declare-styleable name="NewCircleView">
    <attr name="radius" format="integer"/>
    <attr name="circlecolor" format="color" />
</declare-styleable>
</resources>

色.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="black_color">#000000</color>
</resources>

xml の MyCustomView

<com.example.circleview.CustomView
       xmlns:android="http://schemas.android.com/apk/res/android" 
       xmlns:app="http://schemas.android.com/apk/res/com.example.circleview"
        android:id="@+id/cv"
        android:layout_width="match_parent"
        android:layout_height="fill_parent" 
        app:radius="30"
        app:circlecolor="@color/black_color"
      />

スナップショット

ここに画像の説明を入力

于 2013-09-08T08:47:13.643 に答える
0

私の理解が正しければ、アルファ成分が指定されていないため、定数 0x000000 は透明な黒になります。アルファ値は、4 バイトのカラー値の最初のバイトです。不透明 (ベタ) の黒の定数は 0xff000000 です。つまり、色 0x000000 は 0x00000000 と同じであり、完全に透明に描画されます。赤の定数も間違っているように見え、透明な緑になります。

于 2015-08-13T23:40:51.420 に答える