これを取り除くためにあらゆる種類のさまざまな方法を試してきたので、うまくいけばこれは簡単なものです.
時計アニメーションを組み込んだAndroidアプリを作っています。非常に面倒なことを除いて、すべてがうまく機能しています。
時計に秒針があり、次のコードを使用して秒針の中心点を中心に回転させています。お気づきかもしれませんが、私はこれをアナログの秒針のように見せようとしているので、ただ時を刻むのではなく、スイープします。
public float secdegrees, secondwidth, secondheight;
secondMatrix = new Matrix();
secondwidth = secondHand.getWidth();
secondheight = secondHand.getHeight();
secdegrees = anglepersec * secnow;
secdegrees += anglepluspermilli * millis;
secondMatrix.setRotate(secdegrees, secondwidth/2, secondheight / 2);
newSecond = Bitmap.createBitmap(secondHand, 0, 0,
(int) secondwidth, (int) secondheight, secondMatrix, true);
c.drawBitmap(newSecond, (centrex - newSecond.getWidth()/2),
((face.getHeight()/2) - newSecond.getHeight()/2), null);
それは実際に私が望む仕事をします...ほとんど。
問題は、中心点の周りで手がわずかに揺れたり揺れたりすることですが、それは非常に目立ち、美学を損ないます.
float 値を丸める方法だと思いますが、誰かが以前にこれを経験し、それを取り除く方法についてアイデアを持っていることを望んでいました.
参考までに、秒針の画像は元は 74 px x 28 px で、(現在) 74 x 74 ピクセルの .png で、秒針の中央が交差点を正確に横切っています。また、75 x 75 にしようとしたので、実際には中央のピクセルもありますが、うまくいきません。
どんな助けでも大歓迎です。
** アップデート
小数が削除された場合に備えてコードを変更しようとしましたが、残念ながらまだうまくいきません。これが私が試して失敗したオプション2です。
secondMatrix = new Matrix();
secondwidth = secondHand.getWidth();
secondheight = secondHand.getHeight();
secdegrees = anglepersec * secnow;
secdegrees += anglepluspermilli * millis;
secondMatrix.setRotate(secdegrees, secondwidth/2, secondheight / 2);
newSecond = Bitmap.createBitmap(secondHand, 0, 0, (int) secondwidth,
(int) secondheight, secondMatrix, true);
float secW = newSecond.getWidth()/2;
float secH = newSecond.getHeight()/2;
// NEW CODE HERE
float calcdeg = secdegrees % 90;
calcdeg = (float) Math.toRadians(calcdeg);
float NegY = (float) ((secondwidth*Math.cos(calcdeg)) +
(secondwidth * Math.sin(calcdeg)));
c.drawBitmap(newSecond, centrex - NegY/2,
((face.getHeight()/2) - NegY/2), null);