3

TextView の背景を円形にしたいので、以下のような形状スタイルを作成しました。ただし、複数のサイズの複数の色が必要なので (textSize は一定のまま)、スタイルで幅/高さを設定する必要があります。

私の理解から..レイヤーリストはすべての形状を互いに重ねますか?異なる場所で 12 回呼び出す必要があるため、12 個の形状スタイル xml を持つのはかなり面倒に思えます。

1 つの XML 内にさまざまな形状/サイズの組み合わせをすべて含めるより良い方法はありますか?

形のスタイル:

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="oval">
    <corners android:radius="10dp"/>
    <solid android:color="@color/girl_orange"/>
        <size
        android:width="84dp"
        android:height="84dp" />
</shape>

レイアウト xml で呼び出される:

android:background="@drawable/skills_circle"

前もって感謝します!!

4

2 に答える 2

2

カスタム Drawable を作成します。このようにして、サイズ/色の何百万もの組み合わせを作成できます。

class CircleDrawable extends Drawable {
...
}
于 2013-07-19T20:54:06.327 に答える
1

そこで、pskink のアドバイスに従い、CircleDrawable クラスを作成しました。

私のアプリケーションでは非常にうまく機能します (正しい方法かどうかはわかりませんが...) ので、共有したいと思いました。

public CircleDrawable(Bitmap bitmap, Context context) {
    paint = new Paint();
    paint.setAntiAlias(true);
    paint.setStyle(Paint.Style.FILL);
    CircleDrawable.context = context;
    drawable = new ShapeDrawable(new OvalShape());
    setColor();  // supports multiple color
    setSize();  //supports multiple size
}

private void setColor() {

     // some algorithm to pick the right color...
    if (...)
        int color = context.getResources().getColor(R.color.pale_blue);

    paint.setColor(color);
}

    /* 
     * algorithm to set size here...
     */

@Override
public void draw(Canvas canvas) {

    //draw circle in the middle of the TextView 
    canvas.drawCircle(textViewSize, textViewSize, circleSize, paint);
}

そして、円を動的に描画する必要があるメインコードでは:

    final float scale = getApplicationContext().getResources().getDisplayMetrics().density;
    int pixels = (int) (107.0f * scale + 0.5f);
    skills.setWidth(pixels);
    skills.setHeight(pixels);
    skills.setBackground(new CircleDrawable(null, getApplicationContext()));

そして、さまざまな形や色の円がたくさんできました。 ここに画像の説明を入力

于 2013-07-19T22:44:58.430 に答える