Можем ли мы иметь два полотна в игре? (ИЛИ) Холст вне onDraw () не работает - PullRequest
0 голосов
/ 12 апреля 2011
@Override
        protected void onDraw(Canvas canvas) {
        // Draw graphic objects
         .....
             }

         public void displayCalc(){

           //Do some calculation & display results near these graphic objects
            String result = String.valueOf(value);

             //Do some calculation

              //Display Calculated values
             Canvas c =new Canvas();
             Paint paint = new Paint();
             paint.setStyle(Paint.Style.FILL);
             paint.setAntiAlias(true);
             paint.setColor(Color.WHITE);
             c.drawText(result,200,300,paint);
                     }

Но если у меня то же самое в функции onDraw, она работает нормально. Я хотел бы знать, почему или какие изменения я должен сделать, чтобы это заработало

   @Override
    protected void onDraw(Canvas canvas) {

    // Draw graphic objects 
    //Do some calculation & display results near these graphic objects
     .....
     String result = String.valueOf(value);

        //Display Calculated values
         Paint paint = new Paint();
         paint.setStyle(Paint.Style.FILL);
         paint.setAntiAlias(true);
         paint.setColor(Color.WHITE);
         canvas.drawText(result,200,300,paint);
}

Ответы [ 2 ]

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

Если вы пытаетесь реализовать какую-то двойную буферизацию, вы можете взглянуть на this

Я думаю, что ваша проблема в том, что вам нужно создать растровое изображение,затем прикрепите к нему холст, что-то вроде:

Bitmap bitmap = Bitmap.createBitmap(width, height, Config.RGB_565);
Canvas c = new Canvas(bitmap);

// then draw to the canvas..
// and when you're happy, draw the bitmap onto the canvas supplied to onDraw.

Просто создавая холст, вы не увидите его на экране.

Вы также можете взглянуть на: этот урок

Если у вас есть SurfaceView, вы можете сделать что-то вроде этого (не иметь компилятора, но, надеюсь, вы поймете суть):

SurfaceView view = (SurfaceView)findViewById(R.id.view);

SurfaceHolder holder = view.getHolder(); // save this where it can be accessed by your function

Canvas c 
try  {
    c = holder.lockCanvas();
    // draw stuff
}
finally {
    if(null != c) {
        holder.unlockCanvasAndPost(c);
    }
}
0 голосов
/ 12 апреля 2011

Если вы хотите иметь два SurfaceViews, просто добавьте их в макет и назначьте им собственный поток (или объедините оба чертежа в один поток).

Не понимаю, почему вы хотите нарисовать на отдельном холсте в первом примере вашего метода ... Может быть, вы предоставили больше информации о том, чего пытаетесь достичь.

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