Рисунок Android на поверхности и холсте

У меня есть «простая» проблема. Я пытаюсь рисовать на поверхности. Компоновка-XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:keepScreenOn="true" android:orientation="vertical" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <SurfaceView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/imagesurface" android:layout_height="fill_parent" android:layout_width="fill_parent" android:background="#00ff00"> </SurfaceView> </LinearLayout> 

Активность – это SurfaceHolder.Callback:

 public class OpenCvonAndroidGTDforHOGActivity extends Activity implements SurfaceHolder.Callback{ private SurfaceHolder _surfaceHolder; private SurfaceView _surfaceView; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); _surfaceView = (SurfaceView)findViewById(R.id.imagesurface); _surfaceHolder = _surfaceView.getHolder(); _surfaceHolder.addCallback(this); _surfaceView.setWillNotDraw(false); } protected void onDraw(Canvas canvas) { canvas.drawRGB(255, 0, 255); } public void surfaceCreated(SurfaceHolder holder) { Canvas canvas = null; try { canvas = holder.lockCanvas(); synchronized(holder) { onDraw(canvas); } } catch (Exception e) { e.printStackTrace(); } finally { if (canvas != null) { holder.unlockCanvasAndPost(canvas); } } } public void showToast(String msg) { Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT).show(); } } 

Если я позвоню

_surfaceview.setBackground(Color.RED) в onDraw (…) работает. Но

canvas.drawRGB(255, 0, 255) не работает 🙁

Следующий фрагмент поможет вам.

 public class SurfaceDemo extends Activity implements SurfaceHolder.Callback { private static final String TAG = "Svetlin SurfaceView"; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SurfaceView view = new SurfaceView(this); setContentView(view); view.getHolder().addCallback(this); } @Override public void surfaceCreated(SurfaceHolder holder) { tryDrawing(holder); } @Override public void surfaceChanged(SurfaceHolder holder, int frmt, int w, int h) { tryDrawing(holder); } @Override public void surfaceDestroyed(SurfaceHolder holder) {} private void tryDrawing(SurfaceHolder holder) { Log.i(TAG, "Trying to draw..."); Canvas canvas = holder.lockCanvas(); if (canvas == null) { Log.e(TAG, "Cannot draw onto the canvas as it's null"); } else { drawMyStuff(canvas); holder.unlockCanvasAndPost(canvas); } } private void drawMyStuff(final Canvas canvas) { Random random = new Random(); Log.i(TAG, "Drawing..."); canvas.drawRGB(255, 128, 128); } } 

SurfaceView состоит из View в вашем текущем макете и поверхности под вашим макетом. Если вы установите фон для представления, вы ничего не увидите о том, что происходит на поверхности.

Ты пробовал

 yourHolder.unlockCanvassAndPost(your_canvas); 
Intereting Posts
Проверьте равные и не равные условия для двойных значений Как программно установить сертификат CA (для конфигурации EAP WiFi) в Android? Wi-Fi-модем – как получить список подключенных клиентов Автоматически изменять фон кнопки и текст при нажатии (например, iOS)? Кордова избегает перезагрузки страницы на обратной стороне браузера Выполнить код один раз после каждой загрузки на Android Столбец GridLayout выходит за пределы Как вы используете второй параметр в методе раздувания класса LayoutInflater, Android Простой контроль версий для Eclipse и Android Не удалось найти цель с хеш-строкой 'android-25' Установка тревоги (как в будильнике) с использованием намерений Android: объединение значков и текста в полную кнопку Загрузите видео в реальном времени на веб-камеру Android на сервер RTP / RTSP Всегда показывать полосу прокрутки для ListView Android: отображение клавиатуры перемещает мои компоненты вверх, я хочу скрыть их