manolazo
11/04/13, 19:43:57
Buenas.
Estoy aprendiendo a usar animaciones sobre SurfaceView y hay alguna cosa que no entiendo , como por ejemplo el siguiente código en el cual no se dibuja una serie de imagenes creadas con un Bitmap.
Este es el codigo de la actividad principal:
package com.example.pruebasgraficos;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
public class MainActivity1 extends Activity {
SuperficiePanel vista = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
vista = new SuperficiePanel(this);
setContentView(vista);
}
@Override
protected void onPause() {
super.onPause();
vista.pause();
}
@Override
protected void onStart() {
super.onStart();
vista.resume();
}
Y este seria el codigo que la SurfaceView en el cual no se pintan las imagenes:
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class SuperficiePanel extends SurfaceView implements Runnable{
Bitmap bola1;
Bitmap bitmap1=null;
SurfaceHolder holder;
Thread hilo=null;
boolean isrunning = false;
float x, y;
public SuperficiePanel(Context context) {
super(context);
holder = this.getHolder();
bola1=BitmapFactory.decodeResource(this.getResourc es(), R.drawable.ball);
x=y=0;
}
public void pause(){
isrunning = false;
while(true){
try {
hilo.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
break;
}
hilo=null;
}
public void resume(){
isrunning = true;
hilo = new Thread(this); //pasamos el objeto new Runnable
hilo.start();
}
@Override
public void run() {
Paint paint = new Paint();
paint.setColor(Color.RED);
paint.setStrokeWidth(1);
paint.setTextSize(20);
while (isrunning){
if(!holder.getSurface().isValid())
continue;
Canvas canvas = holder.lockCanvas();
//creamos bitmap y lo pintamos
if(bitmap1 == null){
bitmap1 = Bitmap.createBitmap (1, 1, Bitmap.Config.ARGB_8888);
}
Canvas canvas2 = new Canvas(bitmap1);
canvas2.drawColor(Color.WHITE);
canvas2.drawCircle(80,80, 30, paint);
canvas2.drawLine(80, 80, 80, 200, paint);
canvas2.drawText(""+canvas.getWidth()+", "+canvas.getHeight(), 0, 200,paint);
canvas.drawBitmap(bitmap1, 0,0, null);
holder.unlockCanvasAndPost(canvas);
}
}
}
Se queda la pantalla en negro.
Alguna sugerencia?
Un saludo.
Estoy aprendiendo a usar animaciones sobre SurfaceView y hay alguna cosa que no entiendo , como por ejemplo el siguiente código en el cual no se dibuja una serie de imagenes creadas con un Bitmap.
Este es el codigo de la actividad principal:
package com.example.pruebasgraficos;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
public class MainActivity1 extends Activity {
SuperficiePanel vista = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
vista = new SuperficiePanel(this);
setContentView(vista);
}
@Override
protected void onPause() {
super.onPause();
vista.pause();
}
@Override
protected void onStart() {
super.onStart();
vista.resume();
}
Y este seria el codigo que la SurfaceView en el cual no se pintan las imagenes:
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class SuperficiePanel extends SurfaceView implements Runnable{
Bitmap bola1;
Bitmap bitmap1=null;
SurfaceHolder holder;
Thread hilo=null;
boolean isrunning = false;
float x, y;
public SuperficiePanel(Context context) {
super(context);
holder = this.getHolder();
bola1=BitmapFactory.decodeResource(this.getResourc es(), R.drawable.ball);
x=y=0;
}
public void pause(){
isrunning = false;
while(true){
try {
hilo.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
break;
}
hilo=null;
}
public void resume(){
isrunning = true;
hilo = new Thread(this); //pasamos el objeto new Runnable
hilo.start();
}
@Override
public void run() {
Paint paint = new Paint();
paint.setColor(Color.RED);
paint.setStrokeWidth(1);
paint.setTextSize(20);
while (isrunning){
if(!holder.getSurface().isValid())
continue;
Canvas canvas = holder.lockCanvas();
//creamos bitmap y lo pintamos
if(bitmap1 == null){
bitmap1 = Bitmap.createBitmap (1, 1, Bitmap.Config.ARGB_8888);
}
Canvas canvas2 = new Canvas(bitmap1);
canvas2.drawColor(Color.WHITE);
canvas2.drawCircle(80,80, 30, paint);
canvas2.drawLine(80, 80, 80, 200, paint);
canvas2.drawText(""+canvas.getWidth()+", "+canvas.getHeight(), 0, 200,paint);
canvas.drawBitmap(bitmap1, 0,0, null);
holder.unlockCanvasAndPost(canvas);
}
}
}
Se queda la pantalla en negro.
Alguna sugerencia?
Un saludo.