Рисунок 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
Как поймать событие кнопки «Назад» в Android? Не удается получить доступ к серверу Apache с телефона Android Ошибки компиляции OpenCV / Android Запись видео в формате Android с ограничением продолжительности и низким качеством Создание заблокированного ScrollView в Android Ярлыки или пузыри Android в EditText После извлечения кода в виджет lib больше не работает Как получить диалоговое окно предупреждения по умолчанию на андроиде есть черная тема Невозможно загрузить класс OutputFileTask с помощью Android Studio 1.2 и Gradle 1.2.2 Просмотр размытия реплик и повторение проблемы В DiskLruCache из учебника android отсутствует множество методов. Holo Light с Dark Actionbar, показывающий Holo Темные копии и вставки значков Киткат убивает: Не разрешено загружать локальный ресурс: file: ///android_asset/webkit/android-weberror.png Как установить кнопку не кликабельную во время анимации на Android? Контактные маяки: непоследовательные и ненадежные результаты при определении расстояния маяка