Autore Topic: canvas.drawText  (Letto 612 volte)

Zate

  • Visitatore
canvas.drawText
« il: 22 Settembre 2011, 22:28:23 CEST »
0
LogCat:

Codice: [Seleziona]
I/ActivityManager( 1703): <!>com.android.server.am.ActivityRecord 444<!> Display
ed com.vertical.roll/.VerticalRollActivity: +327ms
W/dalvikvm(12186): threadid=9: thread exiting with uncaught exception (group=0x4
0018560)
E/AndroidRuntime(12186): FATAL EXCEPTION: Thread-11
E/AndroidRuntime(12186): java.lang.NullPointerException
E/AndroidRuntime(12186):        at android.graphics.Canvas.drawText(Native Metho
d)
E/AndroidRuntime(12186):        at com.vertical.roll.VerticalRollActivity$MyBrin
gBackSurface.run(VerticalRollActivity.java:164)
E/AndroidRuntime(12186):        at java.lang.Thread.run(Thread.java:1019)
W/ActivityManager( 1703):   Force finishing activity com.vertical.roll/.Vertical
RollActivity
W/ActivityManager( 1703): Activity pause timeout for HistoryRecord{4085c418 com.
vertical.roll/.VerticalRollActivity}

Codice:

Codice (Java): [Seleziona]
package com.vertical.roll;

import java.util.Random;

import com.vertical.roll.R;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.os.Bundle;
import android.view.KeyEvent;
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;
        int intscore;
        String stringscore;
        Bitmap background;
        Canvas canvas;
        public static String sharedData = "sharedlife";
        int nlife = 3;
        String strlife;
        SharedPreferences data;

        @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);
                data = getSharedPreferences(sharedData, 0);
                strlife = "" + nlife;
                // ourSurfaceView = (MyBringBackSurface) findViewById(R.id.rollsurface);
                ourSurfaceView = new MyBringBackSurface(this);
                ourSurfaceView.setOnTouchListener(this);
                x = 0;
                y = 0;
                Random backgroundselector = new Random();

                switch (backgroundselector.nextInt(3)) {
                case (0):
                        background = BitmapFactory.decodeResource(getResources(),
                                        R.drawable.backgroundyellow);
                        break;
                case (1):
                        background = BitmapFactory.decodeResource(getResources(),
                                        R.drawable.backgroundblue);
                        break;
                case (2):
                        background = BitmapFactory.decodeResource(getResources(),
                                        R.drawable.backgroundgreen);
                        break;
                }
                setContentView(ourSurfaceView);
        }

        @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
                // TODO Auto-generated method stub
                super.onKeyDown(keyCode, event);
                if (keyCode == KeyEvent.KEYCODE_BACK) {
                        Intent i = new Intent(VerticalRollActivity.this, Pause.class);
                        startActivity(i);
                }
                return false;
        }

        @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(10);
                } 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 {

                float changingY, randomX;
                SurfaceHolder ourHolder;
                Thread ourThread = null;
                boolean isRunning = true;

                public MyBringBackSurface(Context context) {
                        // TODO Auto-generated constructor stub
                        super(context);
                        Random Xrazzo = new Random();
                        randomX = Xrazzo.nextInt(320);
                        changingY = 0;
                        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.drawBitmap(background, 0, 0, null);
                                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);
                                       
                                        intscore =+ 1;
                                        stringscore = "" + intscore;
                                        canvas.drawText(stringscore, 10, 10, null);
                                       

                                        if (changingY < canvas.getHeight()) {
                                                changingY += 10;
                                                Bitmap razzo = BitmapFactory.decodeResource(
                                                                getResources(), R.drawable.ostacolo0);
                                                canvas.drawBitmap(razzo, randomX, changingY, null);
                                                if (changingY + razzo.getHeight() >= y
                                                                & changingY + razzo.getHeight() <= y
                                                                                + test.getHeight()
                                                                & randomX + razzo.getWidth() >= x
                                                                & randomX + razzo.getWidth() <= x
                                                                                + test.getWidth()) {
                                                        lostlife();
                                                }
                                        } else {
                                                changingY = 0;
                                                Random Xrazzo = new Random();
                                                randomX = Xrazzo.nextInt(320);
                                                Bitmap razzo = BitmapFactory.decodeResource(
                                                                getResources(), R.drawable.ostacolo0);
                                                canvas.drawBitmap(razzo, randomX, changingY, null);
                                        }

                                }
                                ourHolder.unlockCanvasAndPost(canvas);
                        }
                }


                private void lostlife() {
                        // TODO Auto-generated method stub
                        nlife = nlife - 1;
                        strlife = "" + nlife;
                        SharedPreferences.Editor editor = data.edit();
                        editor.putString("nlife", strlife);
                        editor.commit();

                        if (nlife >= 1) {
                                Intent lostlife = new Intent(VerticalRollActivity.this,
                                                LostLife.class);
                                startActivity(lostlife);
                                changingY = 0;
                                Random Xrazzo = new Random();
                                randomX = Xrazzo.nextInt(320);
                        } else if (nlife == 0) {
                                Intent gameover = new Intent(VerticalRollActivity.this,
                                                GameOver.class);
                                startActivity(gameover);
                        }
                        // FINISH HERE

                }

        }

}


Qua le righe dove ci dovrebbe essere l'errore (all'interno di public void run() ):
Codice (Java): [Seleziona]
intscore =+ 1;
stringscore = "" + intscore;
canvas.drawText(stringscore, 10, 10, null);

Il problema è "Interruzione imprevista". Non so cosa potrei aver sbagliato .-.
Vi chiedo aiuto per l'ennesima volta!  ;-)

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:canvas.drawText
« Risposta #1 il: 22 Settembre 2011, 22:31:50 CEST »
+1
Il problema è "Interruzione imprevista". Non so cosa potrei aver sbagliato .-.
Vi chiedo aiuto per l'ennesima volta!  ;-)

Una curiosità: hai controllato la descrizione del metodo drawText? Può esere null l'ultimo parametro?
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Zate

  • Visitatore
Re:canvas.drawText
« Risposta #2 il: 22 Settembre 2011, 22:39:37 CEST »
0
Meno male che ho trovato questo forum...
Grazie mille!

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:canvas.drawText
« Risposta #3 il: 22 Settembre 2011, 22:50:05 CEST »
0
Meno male che ho trovato questo forum...

Eh però non ti abituare male, la prossima volta leggi almeno documentazione ufficiale.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Zate

  • Visitatore
Re:canvas.drawText
« Risposta #4 il: 22 Settembre 2011, 22:55:32 CEST »
0
Prometto :)