2016-01-25 4 views
2

У меня есть приложение, которое рисует планеты и гороскоп в соответствии с днем ​​рождения человека. Я использую метод onDraw() в пользовательском View, который добавляется к FrameLayout в XML. Проблема в том, что, когда я покидаю страницу и корректирую дату, активность только рисует планеты, но не знаки зодиака для новой даты. Все эти «re» -различия происходят в том же методе onDraw(), и я вижу, что метод onDraw() вызывается даже частью, которая добавляет растровые изображения знака зодиака. Учитывая, что их называют, я не могу сказать, что происходит не так, и чувствую, что это имеет какое-то отношение к растровым изображениям. А так как планеты перерисовываются, я еще больше смущен тем, что может быть проблемой. Я включил код, который предположительно выполняется, но не отображается на экране.метод onDraw() не рисовать все растровые изображения

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); 
    } 

ответ

1

Вы пытались зарегистрировать «x» и «y»? Правильны ли значения после всех вычислений?

+0

Хотелось бы, чтобы все было так просто. Функции getPostionX() и getPositionY() просто возвращают значения X и Y по кругу на 15, 45, 75 ... 345 градусов. Затем эти точки получают растровые знаки знака зодиака. Радикалы зодиака загружаются в первый раз на экране, но они загружаются только один раз. Знаки зодиака должны менять позиции со временем. Если другое время и дата установлены на планетах, они меняют позиции, но не символы зодиака, несмотря на то, что они проходят через тот же метод onDraw(). Теперь я отправлю координаты x, y. – KarlCobb

+0

Спасибо за совет. Простой ответ. Я записал x и y. Я понял, что у меня есть (+ n * Math.PI/6), который я не ввел внутри Math.toRadians() внутри косинусной функции. Поэтому проблема решена. Спасибо за внешнюю перспективу. Вероятно, выбрил день вырывания волос. – KarlCobb

+0

Добро пожаловать. – MobileX

Смежные вопросы