Intereting Posts
Как установить приложение Android Market на эмулятор? «Быстрая загрузка» HTC не транслирует намерения BOOT_COMPLETED и не очищает намерения от диспетчера аварийных сигналов Как вызвать карту google из моего приложения для Android, например, вызвать адрес электронной почты Создание видео из последовательности изображений javacv Просмотр горизонтальной прокрутки в андроиде Android-L CardView Visual Touch Обратная связь Включите GPS программно, как приложение Ola Cabs для Android Как передать список массивов из одной активности в другую без ее запуска Ошибка синтаксиса android – string.xml Android: Как вы передаете обратный вызов активности? Android: запуск службы с параметром Android Сохранение созданных растровых изображений в каталог на SD-карте Admob получать ответ объявления. ErrorCode: 0 Не удалось загрузить объявление: 0 Уведомление многострочное Google maps api для страницы регистрации android

Рисунок 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);