Добавление изображения на холст в Android - PullRequest
3 голосов
/ 28 апреля 2011

Добрый день всем

Я надеялся, что вы сможете помочь мне понять принципы понимания того, как добавить изображение в холст в OnTouchEvent, реализованном в View. Пока что это то, что я придумал.
parent - это действие, в котором создается экземпляр этого настраиваемого представления и добавляется в него.

@Override
protected void onDraw(Canvas canvas)
{
    // TODO Auto-generated method stub
    super.onDraw(canvas);
}

public void insertImage()
{
    if (parent.selected_icon.contentEquals("image1"))
    {
        image = getResources().getDrawable(R.drawable.image1);
    }
    else if (parent.selected_icon.contentEquals("image1"))
    {
        image = getResources().getDrawable(R.drawable.image2);
    }
    else if (parent.selected_icon.contentEquals("iamge3"))
    {
        image = getResources().getDrawable(R.drawable.image3);
    }

    Rect srcRect = new Rect(0, 0, image.getIntrinsicWidth(), 
            image.getIntrinsicHeight());
    Rect dstRect = new Rect(srcRect);

    Bitmap bitmap = Bitmap.createBitmap(image.getIntrinsicWidth(), 
            image.getIntrinsicHeight(), Bitmap.Config.ALPHA_8);

    Canvas canvas = new Canvas();
    canvas.drawBitmap(bitmap, srcRect, dstRect, null);
    invalidate();
}

1 Ответ

1 голос
/ 28 апреля 2011

Если вы хотите нарисовать вид, вы должны сделать это в onDraw(), используя переданный туда Canvas.Это Canvas уже связано с Bitmap, который является фактическим рисунком вашего взгляда.

Я должен был сделать нечто подобное, и мой подход был таким:

  • Iу меня был список «вещей, которые нужно нарисовать поверх представления» как члена класса.
  • всякий раз, когда я добавлял что-то в этот список, я вызывал invalidate(), чтобы вызывать onDraw().
  • Мой onDraw() выглядел так:

...

protected void onDraw(Canvas canvas) {
    super.onDraw(canvas); // the default drawing

    for(ThingToBeDrawn thing : mListOfThingsToBeDrawn) {
         thing.drawThing(canvas); // draw each thing over the view
    }
}

A Canvas - это просто инструмент, используемый для рисования Bitmap,и это работает совсем не так, как SurfaceView.

...