Android onDraw()方法未绘制所有位图

Android onDraw()方法未绘制所有位图,android,view,bitmap,ondraw,Android,View,Bitmap,Ondraw,我有一个应用程序,可以根据人的生日绘制行星和星座。我在自定义的视图中使用onDraw()方法,该视图添加到XML中的FrameLayout。问题是,当我离开页面并调整日期时,活动只会绘制新日期的行星,而不会绘制新日期的黄道带。所有这些“重新”绘制都是在相同的onDraw()方法中进行的,我可以看到onDraw()方法被调用,即使是添加星座位图的部分。考虑到他们被打电话给我,我不知道哪里出了问题,觉得这和位图有关。由于行星被重新绘制,我对这个问题更加困惑。我已经包括了应该正在执行但没有显示在屏幕上

我有一个应用程序,可以根据人的生日绘制行星和星座。我在自定义的
视图中使用
onDraw()
方法,该视图添加到
XML
中的
FrameLayout
。问题是,当我离开页面并调整日期时,活动只会绘制新日期的行星,而不会绘制新日期的黄道带。所有这些“重新”绘制都是在相同的
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);
    }
Log.i(“上升行星”,Integer.toString(上升));
位图capricornBitmap=BitmapFactory.decodeResource(getResources(),R.drawable.capricorn);
位图aquariusBitmap=BitmapFactory.decodeResource(getResources(),R.drawable.aquarius);
Bitmap piscesBitmap=BitmapFactory.decodeResource(getResources(),R.drawable.pisces);
位图airesBitmap=BitmapFactory.decodeResource(getResources(),R.drawable.aires);
位图taurusBitmap=BitmapFactory.decodeResource(getResources(),R.drawable.taurus);
位图geminiBitmap=BitmapFactory.decodeResource(getResources(),R.drawable.gemini);
位图cancerBitmap=BitmapFactory.decodeResource(getResources(),R.drawable.cancer);
位图leoBitmap=BitmapFactory.decodeResource(getResources(),R.drawable.leo);
位图virgoBitmap=BitmapFactory.decodeResource(getResources(),R.drawable.virgo);
Bitmap libraBitmap=BitmapFactory.decodeResource(getResources(),R.drawable.libra);
位图scorpioBitmap=BitmapFactory.decodeResource(getResources(),R.drawable.scorpio);
位图sagitariusBitmap=BitmapFactory.decodeResource(getResources(),R.drawable.sagittarius);
ArrayList bitmapArray=新的ArrayList();
添加(capricornBitmap);
添加(宝瓶座位图);
添加(piscesBitmap);
添加(airesBitmap);
添加(taurusBitmap);
添加(geminiBitmap);
添加(cancerBitmap);
添加(leoBitmap);
添加(virgoBitmap);
添加(位图);
添加(scorpioBitmap);
添加(sagitariusBitmap);
int位映射宽度;
int位图高度;
浮动x=0;
浮动y=0;
for(int i=上升;i<上升+12;i++){
整数乘数=i-上升;
bitmapWidth=bitmapArray.get(i%12).getWidth();
bitmapHeight=bitmapArray.get(i%12).getHeight();
x=(浮动)getPositionX(r_调整,边际,乘数*30+15,上升);
y=(浮动)getPositionY(r_调整,高度,乘数*30+15,上升);
x+=位图宽度/2;
y-=位图高度/2;
Log.i(“bitmapWidth”,Integer.toString(bitmapHeight));
Log.i(“bitmapHeight”,Integer.toString(bitmapHeight));
Log.i(“行星中的i”,Integer.toString(i));
drawBitmap(bitmapArray.get(i%12),x,y,null);
}

您是否尝试记录“x”和“y”字段?经过所有计算后,这些值正确吗?

我希望它能这么简单。函数GetPositionX()和getPositionY()只返回15、45和75的圆上的X和Y值。。。345度。这些点然后接收黄道带符号位图。黄道带位图第一次在屏幕上加载,但只加载一次。黄道十二宫应该随着时间改变位置。如果在行星上放置不同的时间和日期,位置会发生变化,但黄道带符号不会发生变化,尽管使用了相同的onDraw()方法。现在我会发布x,y坐标。谢谢你的建议。一个简单的答案。我记录了x和y,我意识到我有一个(+n*Math.PI/6),我没有把Math.toRadians()放在余弦函数中。所以问题解决了。谢谢你的外部视角。大概刮了一天的头发。