web-dev-qa-db-ja.com

android-プログラムでコーナー半径を設定するにはどうすればよいですか?

2つのListViews(leftList、rightList)があります。また、両方で行ビューとして使用するTextViewが1つあります。長方形の描画可能な形状があり、それを背景としてTextViewに設定します。

この形を変えて、左側の角を丸くしたいと思います。

私が試したこと:

       GradientDrawable gradientDrawable = new GradientDrawable();
       // gradientDrawable.setCornerRadius(30);
        ((GradientDrawable)gradientDrawable.mutate()).setCornerRadius(30);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
            viewHolderPattern.digits.setBackground(gradientDrawable);
        }

右隅の半径を設定してdrawableで新しいレイアウトを作成し、それをsetBackgroundRescourceでtextViewに設定しましたが、それでも機能しませんでした。

両方のlistViewのアイテムとして使用するTextView

<TextView
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:id="@+id/digitsTextView"
    Android:textSize="15dp"
    Android:paddingTop="7dp"
    Android:paddingBottom="8dp"
    Android:fontFamily="monospace"
    Android:textColor="@color/selected_items"
    Android:background="@drawable/digital_text_shape">
</TextView>

形状レイアウトdigital_text_shape.xml

<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:shape="rectangle">
    <stroke
        Android:width="1dp"
        Android:color="@color/orange" />
    <solid Android:color="@color/orange" />
    <corners
        Android:bottomLeftRadius="20dp"
        Android:bottomRightRadius="0dp"
        Android:topLeftRadius="20dp"
        Android:topRightRadius="0dp"
        />
    <padding
        Android:bottom="0dp"
        Android:left="20dp"
        Android:right="0dp"
        Android:top="0dp" />
</shape>

左リストと右リスト

<!-- Left ListView -->
                <LinearLayout
                    Android:layout_width="match_parent"
                    Android:layout_height="wrap_content"
                    Android:layout_weight="1"
                    >
                        <ListView
                            Android:layout_width="match_parent"
                            Android:layout_height="match_parent"
                            Android:layout_gravity="center_horizontal"
                            Android:id="@+id/left_listView"
                            Android:divider="@Android:color/transparent"
                            Android:dividerHeight="0.1sp"
                            Android:choiceMode="singleChoice"

                            >
                        </ListView>
                </LinearLayout>

                <!-- Right ListView -->
                <LinearLayout
                    Android:layout_width="match_parent"
                    Android:layout_height="wrap_content"
                    Android:layout_weight="1"
                    >
                        <ListView
                            Android:id="@+id/right_listView"
                            Android:layout_width="match_parent"
                            Android:layout_height="match_parent"
                            Android:divider="@Android:color/transparent"
                            Android:dividerHeight="0.1sp"
                            Android:choiceMode="singleChoice"
                            >
                        </ListView>
                </LinearLayout>
6
P.Lorand

プログラムでGradientDrawableシェイプを作成する方法の例を次に示します。

GradientDrawable shape = new GradientDrawable();
shape.setShape(GradientDrawable.RECTANGLE);
shape.setColor(Color.RED);
shape.setStroke(3, Color.YELLOW);

グラデーションのすべてのコーナーの半径を変更します。

shape.setCornerRadius(15);

グラデーションの特定のコーナーの半径を変更します。

shape.setCornerRadii(new float[] { 8, 8, 8, 8, 0, 0, 0, 0 });

以下のように、このドローアブルを背景として使用できます。

view.setBackgroundDrawable(shape);
19
Rohit Suthar