キャンバス領域を透明にしたいのは、その背後に画像を追加して、画像の上でキャンバスアクションが発生するようにするためです。キャンバスのコードはここにあります。
public class Panel extends SurfaceView implements SurfaceHolder.Callback {
private ViewThread mThread;
private ArrayList<Element> mElements = new ArrayList<Element>();
public Panel(Context context, AttributeSet attrs) {
super(context, attrs);
getHolder().addCallback(this);
mThread = new ViewThread(this);
}
public void doDraw(Canvas canvas) {
canvas.drawColor(Color.TRANSPARENT);
synchronized (mElements) {
for (Element element : mElements) {
element.doDraw(canvas);
}
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
if (!mThread.isAlive()) {
mThread = new ViewThread(this);
mThread.setRunning(true);
mThread.start();
}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
if (mThread.isAlive()) {
mThread.setRunning(false);
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
synchronized (mElements) {
mElements.add(new Element(getResources(), (int) event.getX(), (int) event.getY()));
}
return super.onTouchEvent(event);
}
}
それを達成する方法、その上のスニペットは非常に役立ちます。ありがとう
これで出力が出ました
public Panel(Context context, AttributeSet attrs) {
super(context, attrs);
this.setBackgroundColor(Color.TRANSPARENT);
this.setZOrderOnTop(true); //necessary
getHolder().setFormat(PixelFormat.TRANSPARENT);
getHolder().addCallback(this);
mThread = new ViewThread(this);
}
背景が透明なキャンバスが必要な場合は、背景画像を構成する必要があります。
mCanvas = new Canvas(mBackgroundBitmap);
bitmap.Config.ARGB_4444を使用
そして、透明として0x00000000のような色を使用します
Bitmap mBackgroundImage = Bitmap.createBitmap(Size, Size,
Bitmap.Config.ARGB_4444);
mCanvas = new Canvas(mBackgroundImage);
お役に立てれば!私はかなり透明なキャンバスを持っています:D yay!
canvas.drawColor(Color.argb(0, 255, 255, 255));
最初の属性はアルファで、残りはRGBカラーです。
または
canvas.drawColor(Color.TRANSPARENT);
これはキャンバスを透明にし、それは私にとってはうまくいきます:)
canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.OVERLAY);
onDraw()
メソッドに次を追加します。
canvas.drawColor(0x00AAAAAA);
これにより、canvas
が透過的になりbackground View
が表示されます。
キャンバスと同じサイズのビットマップを作成できます。 Color.TRANSPARENCYを使用してビットマップのすべての色を消去し、キャンバスビットマップとして設定します。
Bitmap transparentBitmap = Bitmap.createBitmap(canvas.getWidth(), canvas.getHeight(),
Bitmap.Config.ARGB_8888);
transparentBitmap.eraseColor(Color.TRANSPARENT);
canvas.setBitmap(transparentBitmap);
透明なキャンバスを描画するかどうかはわかりませんが、あなたの場合は、背景画像自体を使用してキャンバスを描画する微調整を行うことができます。
そして、あなたはそれに指で描く/ペイントすることができます。
コード例:
BitmapDrawable bd = (BitmapDrawable)<YOUR_ACTIVITY>.this.getResources().getDrawable(R.drawable.<DRAWBLE_ID>);
Bitmap b = bd.getBitmap();
mBitmap = Bitmap.createBitmap(b,0,0,100,100); // This line is required only if you wanna some change in the bitmap you created
mCanvas = new Canvas(mBitmap);
キャンバスのビューの背景色を#00000000に設定します
canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR)
私にとってはうまくいきます
override fun onFinishInflate() {
super.onFinishInflate()
setZOrderOnTop(true)
holder.setFormat(PixelFormat.TRANSLUCENT)
isFocusable = true
holder.addCallback(surfaceCallback)
}