ANDROID: реализация пользовательского представления - PullRequest
0 голосов
/ 20 декабря 2010

У меня есть пользовательский вид. Когда Android вызовет draw () на нем? После вызова onMeasure и onLayout?

'package global.domination.pack;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.util.Log;
import android.view.View;

public class TileView extends View {

    // rules about what can be and is on this tile
    boolean bLand;
    boolean bSea;
    boolean bAir;
    boolean bOccupied;
    Character _character;

    // this tile's coordinates
    int nX;
    int nY;

    // bitmaps used for drawing this tile
    Bitmap _originalBitmap;
    Bitmap _finalBitmap;

    // this constructor initializes all variables (creates the tile)
    public TileView(Context context, boolean isLand, boolean isSea, boolean isAir, boolean isOccupied, int x_Coordinate, int y_Coordinate, Bitmap bitmap) {
        super(context);

        //Initialize variables and set tile graphic.
        bLand           = isLand;
        bSea            = isSea;
        bAir            = isAir;
        bOccupied       = isOccupied;
        nX              = x_Coordinate;
        nY              = y_Coordinate;
        _originalBitmap = bitmap;
        _character      = null;
        _finalBitmap    = bitmap;
    }


    /* This method is called by parent view when it 
     * wants to know this view's drawing preferences
     */
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        // set this tiles dimensions
        this.setMeasuredDimension(50, 50);
    }

    /* This method is called by parent view when it wants 
     * this view to draw itself.
     */
    @Override
    protected void onDraw(Canvas canvas) {      
        // attempt to draw the _finalBitmap (tile graphic with character graphic)
        try{
            canvas.drawBitmap(_finalBitmap, 0, 0, null);
        }
        catch(RuntimeException rtException){
            Log.e("EXCEPTION", "ERROR DRAWING FINAL BITMAP" + rtException.getMessage() , rtException);
        }               
    }
}
'

Ответы [ 2 ]

0 голосов
/ 27 мая 2018

onMeasure() всегда вызывается всякий раз, когда представление должно измерить измерения своего и дочерних представлений. Если вы собираетесь реализовать группу просмотра, то метод onDraw() ее дочернего представления будет вызываться всякий раз, когда группа просмотра должна отправить событие рисования всем своим дочерним элементам после onLayout().

Вот ссылка на изображение, которая может помочь вам понять, как выглядит жизненный цикл:

http://1.bp.blogspot.com/-9UCoqk4eOYs/UXOXi4Gqy5I/AAAAAAAAAG4/A8z6ociZjPY/s1600/android.png

Для краткого описания вы можете прочитать официальный документ .

0 голосов
/ 20 декабря 2010

Вы переопределяете onMeasure() из ViewGroup с? Если это так, вы должны помнить, чтобы позвонить measure() на ваши взгляды ребенка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...