2

アクティビティにボタンがあり、背景画像もあります。セレクター属性を追加しましたが、set_pressed と set_focused で機能しています。しかし、ボタンのデフォルト状態では角が丸くなりません。そのため、背景画像を挿入しました。また、助けてください...

activity_sam.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

  <item    android:state_pressed="true">
    <shape  >

    <solid android:color="#f27d0f"/>
    <corners  android:radius="7dp"/>
    </shape> 
  </item>

  <item    android:state_focused="true">
    <shape  >

    <solid android:color="#f27d0f"/>
    <corners android:radius="7dp"/>
    </shape> 
  </item>

  <item  android:state_focused="false" 
      android:state_enabled="true" 
      android:drawable="@drawable/sam_logo" >
    <shape  >    
    <corners  android:radius="7dp"/>
    </shape> 
  </item>

</selector>
4

4 に答える 4

3
  • ボタンと同じサイズのレイアウトを追加

  • 背景画像を提供し、丸みを帯びた角のxmlをボタンの背景として設定します..それが機能する場合は、回答を受け入れます。


<LinearLayout
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:background="@drawable/ic_launcher"
     android:orientation="vertical" >

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/top_right_left_coner"
        android:text="@string/hello_world" />
</LinearLayout>

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >

    <solid android:color="@android:color/transparent" />

    <stroke
        android:width="1dp"
        android:color="@android:color/black" />

    <padding
        android:bottom="1dp"
        android:left="1dp"
        android:right="1dp"
        android:top="1dp" />

    <corners
        android:bottomLeftRadius="10dip"
        android:bottomRightRadius="10dip"
        android:topLeftRadius="10dip"
        android:topRightRadius="10dip" />        
</shape>
于 2013-10-31T07:03:27.507 に答える
0

これを最後の項目の下に追加します。

 <item>
    <shape>    
    <corners  android:radius="7dp"/>
    </shape> 
  </item>

ボタンのデフォルトのスタイルとして機能します。

于 2013-10-31T06:09:47.660 に答える
0

コードで次のようなことを試してみたいと思います(まだチェックされていません):

    public class MyDrawable extends PaintDrawable {
    BitmapShader mShader;
Rect mRect = new Rect();
        public MyDrawable(BitmapDrawable bitmapDrawable) {
        super();


        final BitmapShader mShader = new BitmapShader(bitmapDrawable.getBitmap(), bitmapDrawable.getTileModeX() == null ? Shader.TileMode.CLAMP : bitmapDrawable.getTileModeX(), bitmapDrawable.getTileModeY() == null ? Shader.TileMode.CLAMP : bitmapDrawable.getTileModeY());
        mPaint = new Paint();
        mPaint.setAntiAlias(true);
        mPaint.setFilterBitmap(true);
        mPaint.setDither(true);
        mPaint.setStyle(Paint.Style.FILL);
        mPaint.setShader(mShader);
    }


    @Override
    public void draw(Canvas canvas) {
        int saveCount = canvas.getSaveCount();
        canvas.save();
        getPadding(mRect);
        canvas.translate(mRect.left, mRect.top);
        getShape().draw(canvas, mPaint);
        canvas.translate(-mRect.left, -mRect.top);
        canvas.restoreToCount(saveCount);

    }


}

これのおかげで、MyDrawable.setCornerRadii(float[] radiuses) を使用できます。このおかげで、4 つの異なる半径 (左上、右上、左下、右下) の rect で画像を描画できます。

于 2013-10-31T06:22:58.233 に答える
0

次のようにデフォルト状態を表示する別の項目を追加します。

<shape>    
<corners  android:radius="7dp"/>
</shape> 

丸みを帯びた角をプログラムで表示したい場合は、次のようにします。

  public Drawable getRoundedBitmap(Bitmap bitmap, float Rnd_px) {

    Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),
            bitmap.getHeight(), Config.ARGB_8888);
    Canvas canvas = new Canvas(output);

    final int color = 0xff151515;
    final Paint paint = new Paint();
    final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
    final RectF rectF = new RectF(rect);
    final float roundPx = Rnd_px;

    paint.setAlpha(50);
    paint.setAntiAlias(true);
    canvas.drawARGB(0, 0, 0, 0);
    paint.setColor(color);
    canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
    paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
    canvas.drawBitmap(bitmap, rect, rect, paint);
    Drawable image = new BitmapDrawable(output);
    return image;
}

上記のコードは、画像の端をトリミングします。画像ビューの上に丸みを帯びたレイヤーを表示したい場合。以下を実行してください。

<?xml version="1.0" encoding="UTF-8"?>

<solid android:color="#FFFFFF" />

<stroke
    android:width="3dp"
    android:color="#0000CC" />

<corners
    android:bottomLeftRadius="5dp"
    android:bottomRightRadius="5dp"
    android:topLeftRadius="5dp"
    android:topRightRadius="5dp" />

<padding
    android:bottom="6dp"
    android:left="6dp"
    android:right="6dp"
    android:top="6dp" />

于 2013-10-31T06:10:55.873 に答える