Android-如何通过alpha掩蔽提高图像翻译的性能?

Android-如何通过alpha掩蔽提高图像翻译的性能?,android,performance,canvas,alpha,multi-touch,Android,Performance,Canvas,Alpha,Multi Touch,我有一段代码,我在渲染alpha蒙版位图的每个触摸事件中调用该代码: 。。。 结果图像还可以,但当我拖动图像时,性能非常慢,我附加了一个说明图像和我的应用程序屏幕截图(注意:应用程序的背景是灰色的) 我应该坚持这条代码(在画布上绘制),还是有更好的方法来实现我的目标?您每次触摸都要创建4个位图,这是您的性能问题。这些是非常昂贵的调用(尤其是decode*()调用。)只创建/加载BTIMAP一次:)每次触摸都要创建4个位图,这是性能问题。这些是非常昂贵的调用(尤其是decode*()调用。)只

我有一段代码,我在渲染alpha蒙版位图的每个触摸事件中调用该代码:

。。。 结果图像还可以,但当我拖动图像时,性能非常慢,我附加了一个说明图像和我的应用程序屏幕截图(注意:应用程序的背景是灰色的)


我应该坚持这条代码(在画布上绘制),还是有更好的方法来实现我的目标?

您每次触摸都要创建4个位图,这是您的性能问题。这些是非常昂贵的调用(尤其是decode*()调用。)只创建/加载BTIMAP一次:)

每次触摸都要创建4个位图,这是性能问题。这些是非常昂贵的调用(尤其是decode*()调用。)只创建/加载BTIMAP一次:)

对,我是怎么想的。。。我会尝试让您知道,在第一次触摸事件之前,您只能创建/解码一次
出血
照片背景
遮罩
。您甚至不需要在每个事件中创建
result
,在第一次触摸事件之前创建一次,并在每次调用时清除它(用黑色填充)。好的,现在性能要好得多,但它仍然没有我希望的那么平滑。如果我要从头开始写这样的东西,什么是正确的方法?对,我在想什么。。。我会尝试让您知道,在第一次触摸事件之前,您只能创建/解码一次
出血
照片背景
遮罩
。您甚至不需要在每个事件中创建
result
,在第一次触摸事件之前创建一次,并在每次调用时清除它(用黑色填充)。好的,现在性能要好得多,但它仍然没有我希望的那么平滑。如果我打算从头开始写这样的东西,那么正确的方法是什么?
        Canvas canvas = new Canvas();
        Bitmap bleed = BitmapFactory.decodeResource(resources, R.drawable.bleed);
        Bitmap photoBG = BitmapFactory.decodeResource(resources, R.drawable.photo_bg);
        Bitmap mask = BitmapFactory.decodeResource(resources, R.drawable.mask);
        Bitmap result = Bitmap.createBitmap(bleed.getWidth(), bleed.getHeight(), Bitmap.Config.ARGB_8888);


        canvas.setBitmap(result);
        Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        paint.setAntiAlias(true);
        paint.setFilterBitmap(true);
        paint.setDither(true);
        canvas.drawBitmap(photoBG, 0, 0, paint);
        canvas.drawBitmap(selectedImage, matrix, paint);
        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));

        canvas.drawBitmap(mask, 0, 0, paint);
        paint.setXfermode(null);
        canvas.drawBitmap(bleed, 0, 0, paint);


        myImageView.setImageBitmap(result);
        bleed.recycle();
        mask.recycle();
        img.invalidate();

    }