Как маскировать изображение, например, мы можем масштабировать/масштабировать/поворачивать фоновое изображение, но не маску?Android Image Masking with Rotate & Scale
я должен быть в состоянии, чтобы увеличить изображение в этой маске, но это масштабирование всего изображения.
Предложите мне способ достичь этого, я создаю приложение для создания коллажа.
Синий цвет фона макета.
белого цвета для маски
Я могу достичь этого типа макета с маскировкой, но когда я применяю MultiTouchListener масштабирования и масштабирование, он будет масштабировать изображение целиком с маской, а не изображение внутри Это.
private void getMaskedBitmap() {
Bitmap bgBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.background_drawable);
ImageView bg = (ImageView) findViewById(R.id.bg);
bg.setImageBitmap(bgBitmap);
Bitmap.Config conf = Bitmap.Config.ARGB_8888;
Bitmap emptyBitmap = Bitmap.createBitmap(bgBitmap.getWidth(), bgBitmap.getHeight(), conf);
Canvas canvasBmp = new Canvas(bgBitmap);
ImageView mImageView = (ImageView) findViewById(R.id.troll_face);
Bitmap original = BitmapFactory.decodeResource(getResources(), R.drawable.random_drawable);
Bitmap mask = BitmapFactory.decodeResource(getResources(), R.drawable.mask_drawable);
original = Bitmap.createScaledBitmap(original, mask.getWidth(), mask.getHeight(), true);
Bitmap result = Bitmap.createBitmap(mask.getWidth(), mask.getHeight(), Config.ARGB_8888);
Canvas mCanvas = new Canvas(result);
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
mCanvas.drawBitmap(original, 0, 0, null);
mCanvas.drawBitmap(mask, 0, 0, paint);
paint.setXfermode(null);
mImageView.setImageBitmap(result);
//mImageView.setScaleType(ScaleType.FIT_XY);
mImageView.setBackgroundResource(R.drawable.background_drawable);
bg.setOnTouchListener(new MultiTouchListener());
mImageView.invalidate();
}
Исключение на линии
Холст canvasBmp = новый холст (bgBitmap);
java.lang.IllegalStateException: Неизменный растровый передается Canvas конструктор
пут emptyBitmap в холст вместо bgBitmap. Как Canvas canvasBmp = new Canvas (emptyBitmap); – Androider
@pokerface Мне нужно создать пользовательский вид только в MainActivity? – SkyWalker
ваш код выглядит не очень хорошо. Как вы можете использовать canvasBmp вместо mCanvas – Androider