2

Image ビューをカットしようとしていますが、今のところカスタム コンポーネントを作成しました。これはコードです:

package it.patrick91.eventually;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.ImageView;

public class CutImageView extends ImageView {
    private Path clipPath;
    private int type = 0;

    public int getType() {
        return type;
    }

    public void setType(int type) {
        Log.d("cut", new Integer(type).toString());
        this.type = type;
    }

    public CutImageView(Context context) {
        super(context);
    }

    public CutImageView(Context context, AttributeSet attrs) {
        super(context, attrs);

        TypedArray a = getContext().obtainStyledAttributes(attrs,
                R.styleable.CutImageView);

        setType(a.getInt(R.styleable.CutImageView_type, 0));
    }

    public CutImageView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);

        TypedArray a = getContext().obtainStyledAttributes(attrs,
                R.styleable.CutImageView);

        setType(a.getInt(R.styleable.CutImageView_type, 0));
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        Log.d("cut", "size changed " + w + " " + h);
        clipPath = new Path();
        if (type == 0) {
            clipPath.moveTo(0, 0);
            clipPath.lineTo(0, h);
            clipPath.lineTo(w, 0);
            clipPath.lineTo(0, 0);
        } else {
            clipPath.moveTo(w, 0);
            clipPath.lineTo(w, h);
            clipPath.lineTo(0, h);
        }
        super.onSizeChanged(w, h, oldw, oldh);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        //canvas.clipPath(clipPath);
        super.onDraw(canvas);

        Bitmap rounder = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888);
        Canvas c = new Canvas(rounder);    

        Paint xferPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        xferPaint.setColor(Color.BLACK);


            c.drawPath(clipPath, xferPaint);

            xferPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
        canvas.drawBitmap(rounder, 0, 0, xferPaint);
    }

}

したがって、この回答に示されているように、基本的に xfer メソッドを使用しています。

問題は、消した部分が黒くなることです。その回答のコメントから読み取ることができるように、ARGB 描画コンテキストにいることを確認する必要がありますが、ImageView のサブクラス内でそれを実行できるかどうかはわかりません。手伝って頂けますか?

これは私が得るものです:

ここに画像の説明を入力

4

0 に答える 0