2016-01-25 1 views
2

J'ai une application qui dessine des planètes et l'horoscope en fonction de l'anniversaire de la personne. J'utilise la méthode onDraw() dans un View personnalisé qui est ajouté à un FrameLayout dans XML. Le problème est que lorsque je quitte la page et que je règle la date, l'activité ne dessine que les planètes mais pas les signes du zodiaque pour la nouvelle date. Tous ces "re" -drawings ont lieu dans la même méthode onDraw() et je peux voir que la méthode onDraw() est appelée même la partie qui ajoute les bitmaps de signe du zodiaque. Étant donné qu'on les appelle, je ne peux pas dire ce qui ne va pas et j'ai l'impression que cela a quelque chose à voir avec les bitmaps. Et depuis que les planètes sont redessinées, je suis encore plus confus au sujet de ce que pourrait être le problème. J'ai inclus le code qui est censé être exécuté mais qui n'apparaît pas à l'écran.Méthode onDraw() ne dessine pas toutes les images

Log.i("ascendet planets", Integer.toString(ascendent)); 

    Bitmap capricornBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.capricorn); 
    Bitmap aquariusBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.aquarius); 
    Bitmap piscesBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.pisces); 
    Bitmap airesBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.aires); 
    Bitmap taurusBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.taurus); 
    Bitmap geminiBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.gemini); 
    Bitmap cancerBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.cancer); 
    Bitmap leoBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.leo); 
    Bitmap virgoBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.virgo); 
    Bitmap libraBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.libra); 
    Bitmap scorpioBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.scorpio); 
    Bitmap sagitariusBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.sagittarius); 


    ArrayList<Bitmap> bitmapArray = new ArrayList<>(); 
    bitmapArray.add(capricornBitmap); 
    bitmapArray.add(aquariusBitmap); 
    bitmapArray.add(piscesBitmap); 
    bitmapArray.add(airesBitmap); 
    bitmapArray.add(taurusBitmap); 
    bitmapArray.add(geminiBitmap); 
    bitmapArray.add(cancerBitmap); 
    bitmapArray.add(leoBitmap); 
    bitmapArray.add(virgoBitmap); 
    bitmapArray.add(libraBitmap); 
    bitmapArray.add(scorpioBitmap); 
    bitmapArray.add(sagitariusBitmap); 




    int bitmapWidth; 
    int bitmapHeight; 



    float x = 0; 
    float y = 0; 
    for (int i = ascendent; i < ascendent + 12; i++) { 
     int multiplier = i - ascendent; 
     bitmapWidth = bitmapArray.get(i%12).getWidth(); 
     bitmapHeight = bitmapArray.get(i%12).getHeight(); 

     x = (float) getPositionX(r_adjusted, marginOneSide, multiplier * 30 + 15, ascendent); 
     y = (float) getPositionY(r_adjusted, height, multiplier * 30 + 15,   ascendent); 

     x += bitmapWidth/2; 
     y -= bitmapHeight/2; 

     Log.i("bitmapWidth", Integer.toString(bitmapHeight)); 
     Log.i("bitmapHeight", Integer.toString(bitmapHeight)); 
     Log.i("i in planets", Integer.toString(i)); 

     canvas.drawBitmap(bitmapArray.get(i % 12), x, y, null); 
    } 

Répondre

1

Avez-vous essayé d'enregistrer les «x» et «y»? Les valeurs sont-elles correctes après tous les calculs?

+0

J'aimerais que ce soit si simple. Les fonctions getPostionX() et getPositionY() retournent simplement les valeurs de X et Y sur un cercle à 15, 45, 75 ... 345 degrés. Ces points reçoivent ensuite les bitmaps du signe du zodiaque. Les bitmaps du zodiaque sont chargés la première fois sur l'écran, mais ils ne sont chargés qu'une seule fois. Les signes du zodiaque sont censés changer de position avec le temps. Si une date et une heure différentes sont mises dans les planètes, elles changent de position, mais pas les symboles du zodiaque, même si elles passent par la même méthode onDraw(). Je posterai les coordonnées x, y bien que maintenant. – KarlCobb

+0

Merci pour le conseil. Une réponse simple. J'ai connecté x et y j'ai réalisé que j'avais un (+ n * Math.PI/6) que je n'avais pas mis à l'intérieur de Math.toRadians() dans une fonction cosinus. Donc problème résolu. Merci pour la perspective extérieure. Probablement rasé un jour de cheveux arrachés. – KarlCobb

+0

De rien. – MobileX