2013-12-02 3 views
0

Я хочу, чтобы нарисовать файл образом на SurfaceView, но когда я запускаю мой код, то SurfaceView совершенно пустойРисунок файла изображения SurfaceView возвращающегося пустой

protected void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.edit); 
    displayPicture(); 
} 

private void displayPicture(){ 
    SurfaceView sv = (SurfaceView) findViewById(R.id.svEditPic); 
    Bitmap bmp = BitmapFactory.decodeFile(path); 
    Canvas c = new Canvas(); 
    c.drawBitmap(bmp, 0, 0, null); 
    sv.draw(c); 
} 

Это не похоже на работу. Любое решение?

+0

Где вы размещаете вышеуказанный код? Пожалуйста, покажите больше кода. – Melquiades

+0

Обновлено. Он помещается внутри метода onCreate. –

+0

Установить brakepoint on Canvas c = new Canvas(); и проверьте, загружено ли изображение. – 3mpty

ответ

0
iv = (ImageView) findViewById(R.id.ivEdit); 
    Bitmap bmp = BitmapFactory.decodeFile(path); 
    Bitmap temp = Bitmap.createBitmap(bmp.getWidth(), bmp.getHeight(), Config.RGB_565); 
    c = new Canvas(temp); 
    c.drawBitmap(bmp, 0, 0, null); 
    iv.setImageBitmap(temp); 

После небольшого поиска я обнаружил, что SurfaceView.draw (canvas) не рисует сам по себе. На самом деле все делается наоборот. Он тянулся к холсту. Я заменил SurfaceView и ImageView, который будет более практичным для того, что я делаю.

0

попробовать это, использовать какое-то значение для экрана X, Y поз для screenPts.x, screenPts.y соответственно

SurfaceView sv = (SurfaceView) findViewById(R.id.svEditPic); 
    Bitmap bmp = BitmapFactory.decodeFile(path); 
    Canvas c = new Canvas(); 
    c.drawBitmap(bmp, screenPts.x, screenPts.y, null); 
    bmp.recycle(); 
    sv.draw(c); 
+0

Все еще пусто. если x и y равны 0, тогда он должен напечатать изображение в левом верхнем углу, верно? Мне не нужно было менять координаты. –

+0

Я обновляю свой ответ. вы можете попробовать это –

+0

и использовать другое значение для screenPts.x, screenPts.y –

3

Если ваш класс рисования расширяет View, вам нужно реализовать:

@Override 
protected void onDraw(Canvas canvas) {} 

и сделать свой рисунок там.

Проверьте образец BitmapDecode.java в папке sdk для android. Кроме того, пожалуйста, прочитайте docs.

+0

Поверхности не являются элементами для стрельбы и забывания, вам необходимо перерисовать их в соответствии с состоянием каждого кадра. Частоту кадров можно фиксировать в соответствии с производительностью или только при вызове. Следуйте совету @Melquiades. –

Смежные вопросы