簡體   English   中英

Android如何旋轉畫布

[英]Android how to rotate canvas

我正在做一個簡單的應用程序,它顯示compas rose +兩個箭頭,分別代表當前和平均風向。 我想要的是在畫布上繪制后旋轉compas rose +兩個箭頭。

這是我的示例:

@Override
public void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    //compass rose
    canvas.drawBitmap(broza, crozax, crozay, null);


    // Draw current wind arrow + rotate for currentwinddirection from json
    matrix.reset();
    matrix.setRotate(180 + (float) currentWindDirection, bkazalec.getWidth() / 2, bkazalec.getHeight() / 2);
    matrix.postTranslate(ckazalecx, ckazalecy);
    canvas.drawBitmap(bkazalec, matrix, mPaint);

    //Draw mean wind arrow + rotate for meanwinddirection from json
    matrix.reset();
    matrix.setRotate(180 + (float) meanWindDirection, bkazalecmean.getWidth() / 2, bkazalecmean.getHeight() / 2);
    matrix.postTranslate(mkazalecx, mkazalecy);
    canvas.drawBitmap(bkazalecmean, matrix, mPaint);

    //here I want to rotate canvas (compas rose + two arrows) for certain degree number which I obtain from sensor. 


    .
    .
    //after this I must "draw" some text for certain datas
    canvas.drawText(getResources().getString(R.string.pod_smer_vetra) + getCurrentWindDirection() + "°", x, y, mPaint);
    y += mPaint.getFontSpacing();
    canvas.drawText(getResources().getString(R.string.pod_hitrost_vetra) + getCurrentWindSpeed() + " m/s", x, y, mPaint);
    y += mPaint.getFontSpacing();
    canvas.drawText(getResources().getString(R.string.pod_povp_smer_vetra) + getMeanWindDirection() + "°", x, y, mPaint);
    y += mPaint.getFontSpacing();
    canvas.drawText(getResources().getString(R.string.pod_pov_hitrost_vetra) + getMeanWindSpeed() + " m/s", x, y, mPaint);
    y += mPaint.getFontSpacing();
    canvas.drawText(getResources().getString(R.string.pod_beaufort) + getMeanWindBeaufort(), x, y, mPaint);
    y += mPaint.getFontSpacing();
    canvas.drawText(getResources().getString(R.string.pod_temp_povrsina_voda) + getTemperatureSeaSurface() + "°C", x, y, mPaint);
    y += mPaint.getFontSpacing();
    canvas.drawText(getResources().getString(R.string.pod_temp_zraka) + getTemperatureAir() + "°C", x, y, mPaint);
}
int saveCount = canvas.save();  // save canvas state
try { // just for case if some exceptions
   canvas.rotate(angle, centerX, centerY);
   if (needScale) canvas.scale(scaleX, scaleY, centerX, centerY);
   // draw here what you want
} finally {
  canvas.restoreToCount(saveCount); // restore previous state, further draw is unrotated
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM