2

次のような Shape を使用して、背景を透明で色付きの要素に簡単に作成できます。

  • カラー ブルー : 無地
  • 白/灰色の四角:透明

ここに画像の説明を入力

<shape 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >
    <corners 
        android:radius="20dp"/>
    <solid 
        android:color="#1f93ed" />
</shape>

しかし、次のような色付きの背景と透明な要素を使用してビューの背景を作成するにはどうすればよいですか:

ここに画像の説明を入力

背景色がフォームによって穴が開いているかのように...何か考えはありますか?

4

3 に答える 3

2

カスタム ドローアブルまたはビューで onDraw をオーバーライドして、自分で色付きの領域を描画できます。

たとえば、このコードでは、4 つの「コーナー アウトライン」を描画します。

@Override
    protected void onDraw(Canvas canvas) 
    {
        super.onDraw(canvas);
        drawCorner(cornerSizeInPixel, canvas, Color.GREEN));
    }

    private void drawCorner(int size, Canvas canvas, int color)
    {
        Paint paint = new Paint();
        paint.setAntiAlias(true);
        paint.setColor(color);
        paint.setStyle(Style.FILL);

        // top left
        Path p = new Path();
        p.moveTo(0, 0);
        p.lineTo(size, 0);
        p.arcTo(new RectF(0, 0, size, size), 180, 90, true);
        p.lineTo(0, 0);
        canvas.drawPath(p, paint);  

        // bottom left
        int h = canvas.getHeight();
        p = new Path();
        p.moveTo(0, h);
        p.lineTo(size, h);
        p.arcTo(new RectF(0, h - size, size, h), 90, 90, true);
        p.lineTo(0, h);
        canvas.drawPath(p, paint);

        // top right
        int w = canvas.getWidth();
        p = new Path();
        p.moveTo(w, 0);
        p.lineTo(w - size, 0);
        p.arcTo(new RectF(w - size, 0, w, size), 270, 90, true);
        p.lineTo(w, 0);
        canvas.drawPath(p, paint);  

        // bottom right
        p = new Path();
        p.moveTo(w, h);
        p.lineTo(w - size, h);
        p.arcTo(new RectF(w - size, h - size, w, h), 0, 90, true);
        p.lineTo(w, h);
        canvas.drawPath(p, paint);  
    }

結果: 画像の隅々に 4 つの緑色のフォームがあり、これらが合わさって丸みを帯びた四角形が本当に透明になります。

于 2013-11-13T13:35:46.507 に答える
0

option 1: use normal .png file

option 2: create a custom Drawable by extending ShapeDrawable class

于 2013-11-13T11:28:23.713 に答える