Android View.onDraw () всегда имеет чистый холст

Из руководства

Procedural style

mixed mysqli_query ( mysqli $link , string $query [, int $resultmode = MYSQLI_STORE_RESULT ] )

Вы увидите переменные $link и $query.

Это означает, что вам нужно передайте функцию действительный ресурс ссылки mysqli, а также запрос, который вы хотите выполнить. Это позволяет функции знать, какое установленное соединение с сервером использовать.

Ресурс ссылки может быть создан с использованием:

Только процедурный стиль: идентификатор ссылки, возвращаемый mysqli_connect ( ) или mysqli_init ()

blockquote>

, и пример того, как это сделать, можно найти на вышеупомянутой странице руководства.

16
задан Kara 12 December 2013 в 06:02
поделиться

3 ответа

Я не уверен, есть ли способ или нет. Но для моих пользовательских представлений я либо перерисовываю все каждый раз, когда вызывается onDraw(), либо рисую растровое изображение, а затем рисую растровое изображение на холсте (как вы предложили в своем вопросе).

Вот как я это делаю

class A extends View {

    private Canvas canvas;
    private Bitmap bitmap;

    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        if (bitmap != null) {
            bitmap .recycle();
        }
        canvas= new Canvas();
        bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
        canvas.setBitmap(bitmap);
    }
    public void destroy() {
        if (bitmap != null) {
            bitmap.recycle();
        }
    }
    public void onDraw(Canvas c) {
      //draw onto the canvas if needed (maybe only the parts of animation that changed)
      canvas.drawRect(0,0,10,10,paint);

      //draw the bitmap to the real canvas c
      c.drawBitmap(bitmap, 
          new Rect(0,0,bitmap.getWidth(),bitmap.getHeight()), 
          new Rect(0,0,bitmap.getWidth(),bitmap.getHeight()), null);
    }
}
28
ответ дан 30 November 2019 в 12:43
поделиться

вы должны посмотреть здесь, чтобы увидеть разницу между базовым представлением и surfaceView. У surfaceView есть выделенный слой для рисования, который, я полагаю, отслеживает то, что вы нарисовали раньше. Если вы действительно хотите сделать это в базовом представлении, вы можете попробовать поместить каждый элемент, который вы рисуете, в массив, как в примере itemized overlay для mapview. Это должно работать практически так же

.
1
ответ дан 30 November 2019 в 12:43
поделиться

Ваши ожидания не соответствуют реальности :) Холст будет не таким, каким вы его оставили, вместо этого он будет пустым. Вы можете создать ArrayList объектов для рисования (canvas.drawCircle (), canvas.drawBitmap () и т. Д.), А затем выполнить итерацию по ArrayList в OnDraw (). Я новичок в программировании графики, но я использовал это в небольшом масштабе. Может, есть способ получше.

0
ответ дан 30 November 2019 в 12:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: