Получить наложенное растровое изображение из Custom ImageView

Я проверял идею и наткнулся на проблему. Я сделал собственный ImageView. Я назвал его LayeredView, и идея заключается в том, что я могу добавить к нему несколько слоев растрового изображения, и он добавляет эти слои поверх нарисованного src для создания фреймов, палочек и тому подобного. Мне удалось заставить изображения накладываться и показываться правильно, но теперь, когда я пытаюсь получить результирующее растровое изображение, оно теряет масштаб. В моем тесте я попытался получить кэш чертежа и поместить его в другой ImageView. Результат в этих ссылках (из-за отсутствия репутации)

LayeredView успешно показан: https://www.dropbox.com/s/34dcktew05yc1hg/Screenshot_2015-06-17-00-30-34.png?dl=0 Результат со смещенными слоями https://www.dropbox.com/s/pveeotksxss2oos/Screenshot_2015-06-17-00-30-53.png?dl=0 Мой код похож на:

public class LayeredView extends ImageView
{

    private List<Layer> layers;

    public LayeredView(Context context){
        this(context, null);
    }

    public LayeredView(Context context, AttributeSet attrs){
        super(context, attrs);
        layers = new ArrayList<Layer>();
        addBitmap(((BitmapDrawable) context.getResources().getDrawable(R.drawable.frame1)).getBitmap());
    }

    public void addBitmap(Bitmap bitmap){
        layers.add(new Layer(bitmap, true));
        invalidate();
    }

    @Override
    protected void onDraw(Canvas canvas)
    {
        // TODO: Implement this method
        super.onDraw(canvas);
        Rect rect = new Rect(0, 0, getWidth(), getHeight());
        // using get(0) to test
        canvas.drawBitmap(layers.get(0).bitmap, rect, rect, null);
    }

    private class Layer{
        public Bitmap bitmap;
        public boolean show;

        public Layer(Bitmap b, boolean  s){
            this.bitmap = b;
            this.show = s;
        }

    }

}

И на кнопку OnClick

public void copy(View v){
        ((LayeredView)findViewById(R.id.lv)).buildDrawingCache();

        ((ImageView)findViewById(R.id.iv)).setImageBitmap(((LayeredView)findViewById(R.id.lv)).getDrawingCache(true));
    }

Заранее спасибо за любые подсказки.

0 ответов

Другие вопросы по тегам