Autore Topic: Background in Surfaceview  (Letto 485 volte)

Zate

  • Visitatore
Background in Surfaceview
« il: 18 Settembre 2011, 18:10:43 CEST »
0
Codice (Java): [Seleziona]
package com.vertical.roll;

import com.vertical.roll.R;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.View.OnTouchListener;

public class VerticalRollActivity extends Activity implements OnTouchListener {

        MyBringBackSurface ourSurfaceView;
        float x, y;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
                // TODO Auto-generated method stub
                super.onCreate(savedInstanceState);
                requestWindowFeature(Window.FEATURE_NO_TITLE);
                getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                                WindowManager.LayoutParams.FLAG_FULLSCREEN);
                ourSurfaceView = new MyBringBackSurface(this);
                ourSurfaceView.setOnTouchListener(this);
                x = 0;
                y = 0;
                setContentView(ourSurfaceView);
        }

        @Override
        protected void onPause() {
                // TODO Auto-generated method stub
                super.onPause();
                ourSurfaceView.pause();
        }

        @Override
        protected void onResume() {
                // TODO Auto-generated method stub
                super.onResume();
                ourSurfaceView.resume();
        }

        @Override
        public boolean onTouch(View v, MotionEvent event) {
                // TODO Auto-generated method stub
               
                try {
                        Thread.sleep(50);
                } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
               
                x = event.getX();
                y = event.getY();
                return true;
        }

        public class MyBringBackSurface extends SurfaceView implements Runnable {

                SurfaceHolder ourHolder;
                Thread ourThread = null;
                boolean isRunning = true;

                public MyBringBackSurface(Context context) {
                        // TODO Auto-generated constructor stub
                        super(context);
                        ourHolder = getHolder();
                       
                }

                public void pause() {
                        isRunning = false;
                        while (true) {
                                try {
                                        ourThread.join();
                                } catch (InterruptedException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                }
                                break;
                        }
                        ourThread = null;
                }

                public void resume() {
                        isRunning = true;
                        ourThread = new Thread(this);
                        ourThread.start();
                }

                @Override
                public void run() {
                        // TDO Auto-generated method stub
                        while (isRunning) {
                                if (!ourHolder.getSurface().isValid())

                                        continue;

                                Canvas canvas = ourHolder.lockCanvas();
                                canvas.drawRGB(02, 02, 255);
                                if (x != 0 && y != 0) {
                                        Bitmap test = BitmapFactory.decodeResource(getResources(),
                                                        R.drawable.rsz_greenball);
                                         
                                        canvas.drawBitmap(test, x-test.getWidth()/2,y-test.getHeight()/2, null);
                                }
                                ourHolder.unlockCanvasAndPost(canvas);
                        }
                }

        }

}

Vorrei mettere al posto di:
Codice (Java): [Seleziona]
canvas.drawRGB(02, 02, 255);uno sfondo chiamato backgroundyellow. Modifico il codice così:
Codice (Java): [Seleziona]
Bitmap background = BitmapFactory.decodeResource(getResources(), R.drawable.backgroundyellow);            
canvas.drawBitmap(background, 320, 480, null);  
//canvas.drawRGB(02, 02, 255);

Ma la bitmap non si carica, lo sfondo è nero e se trascino la rsz_greenball, essa si duplica.

Come fare a settare uno sfondo?

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Background in Surfaceview
« Risposta #1 il: 18 Settembre 2011, 18:21:46 CEST »
+1
Come mai vuoi disegnare la bitmap a partire dalle coordinate 320,480?

Codice (Java): [Seleziona]
canvas.drawBitmap(background, 320, 480, null);  
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Zate

  • Visitatore
Re:Background in Surfaceview
« Risposta #2 il: 18 Settembre 2011, 18:26:01 CEST »
0
Per errore  :D
Funziona tutto perfettamente (pensa un po'  :-P)
Grazie!