Android перекрывающиеся представления - PullRequest
0 голосов
/ 17 августа 2010

Я новичок в Android и позвольте мне сначала рассказать вам, чего я пытаюсь достичь.Используя сокеты, я отправляю фотографии с веб-камеры моего компьютера каждые 50 мс.В приложении для Android я создал свой дисплей, который расширяет вид.Я добавил это представление в FrameLayout.Параллельный поток получает изображения из серверного приложения (рабочего стола) и обновляет мой дисплей.

На этом изображении я хочу отобразить некоторые данные акселерометра, которые обновляются каждые ... Ну, это установлено на SENSOR_DELAY_FASTEST.Поэтому я также создал еще одно отображение, расширяющее View, и добавил его в другой FrameLayout.Теперь я настроил свой main.xml так, чтобы он перекрывал эти FrameLayouts ..

Я получаю свое изображение из настольного приложения, я рисую данные акселерометра, и оно перекрывается, но проблема в том, что ... Мерцает.Кто-нибудь может помочь?Или предложить что-нибудь .. Как я уже говорил, я новичок в Android.

Спасибо ..

1 Ответ

0 голосов
/ 17 августа 2010

Это простое переопределение, которое рисует изображение. - И метод, который вызывает перерисовку.

@Override
protected void onDraw(Canvas canvas){
    Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG);
    paint.setARGB(10, 255, 255, 255);
    if(Core.pic != null) {
        canvas.drawBitmap(Core.pic, 0, 0, paint);
    }       
}

Вот другой класс, который вызывает перерисовку, когда доступно новое изображение:

    protected static volatile Bitmap pic;
    public static void refreshDisplay(Bitmap img){
    pic = img;
    if(cameraDisplay != null) {
        try{
            cameraDisplay.invalidate();
        }
        catch(Exception e){
            e.printStackTrace();
        }
    }
}

А вот класс с резьбой, который готов порт каждые 50 мс:

        while(running){

        opt.inDither = true;
        opt.inPreferredConfig = Bitmap.Config.ARGB_8888;

        if(in != null){
            byte[] recieve = new byte[7000];
            try {
                in.read(recieve, 0, 7000);
                Core.pic = BitmapFactory.decodeByteArray(recieve, 0, 7000, opt);    
            } catch (IOException e) {}
        }
        try {
            sleep(50);
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }
    }

Это само по себе работает нормально. Когда я перекрываю это представление, оно мерцает. Аналогичным образом я читаю данные акселерометра и рисую их:

    public void onAccelerationChanged(float x, float y, float z) {
    if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT){
        velocityBars.DrawVelocity(x, -z);
    }
    else if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE){
        velocityBars.DrawVelocity(y, -z);
    }
}

speedBars - это моя переменная, которая является типом моего пользовательского просмотра. Этот метод DrawVelocity вызывает метод invalidate (). Это заставляет перерисовать.

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