Réglage de l'image d'arrière-plan dans SurfaceView, l'obtention d'écran noir
Ok, donc, Im essayant de définir l'arrière-plan d'une SurfaceView à un fichier JPG. Mais il ne semble pas vouloir attirer l'image, et tout ce que j'obtiens un écran noir.
Ici:s mon code:
public class FloorplanActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MapView mapView = new MapView(getApplicationContext());
setContentView(mapView);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.floorplan, menu);
return true;
}
class MapView extends SurfaceView{
Rect testRectangle1 = new Rect(0, 0, 50, 50);
Bitmap scaled;
int x;
int y;
public MapView(Context context) {
super(context);
}
public void surfaceCreated(SurfaceHolder arg0){
Bitmap background = BitmapFactory.decodeResource(getResources(), R.drawable.floorplan);
float scale = (float)background.getHeight()/(float)getHeight();
int newWidth = Math.round(background.getWidth()/scale);
int newHeight = Math.round(background.getHeight()/scale);
scaled = Bitmap.createScaledBitmap(background, newWidth, newHeight, true);
}
public void onDraw(Canvas canvas) {
canvas.drawBitmap(scaled, 0, 0, null); //draw the background
}
Ne sais pas pourquoi il ne dessinera pas le "plan" de l'image que j'ai enregistré dans le drawable-mdpi dossier.
Quelqu'un a des suggestions?
Grâce.
EDIT: Après avoir fait un peu de débogage avec des points d'arrêt, il semble que le "réduite" variable devient "l'Infini" pour une raison quelconque, et en tant que tel le newWidth et newHeight variables deviennent de moins de 0 et l'application se bloque.
Ce n'est que si je déplace l'ensemble de la surfaceCreated dans le constructeur, si je laisse le code est ici, alors qu'il n'a rien beyind affichage d'un écran noir.
Aucune idée de ce qui est la cause de faire que, bien que...
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, vous devez mettre en œuvre SurfaceHolder.Interface de rappel avec votre MapView classe et de le définir comme un rappel pour ses SurfaceHolder pour rendre l'application appelez votre onSurfaceCreated() metod.
Deuxièmement, si vous voulez que votre onDraw() la méthode à appeler, puis d'appeler setWillNotDraw(false) dans votre MapView du constructeur.
Je l'ai fait comme suit:
Et il fonctionne bien.
REMARQUE: Déplacé MapView classe à une autre *.fichier java.
Mise À Jour De La Montre En Double Exemplaire Déplacer
onDraw()
, vous vous êtes rendu sur la Vue; si vous remplissez la Vue avec les pixels opaques, alors il n'y a pas de raison d'être à l'aide d'une SurfaceView à tous (il suffit de créer une Vue personnalisée).