我正在尝试制作一个应用程序,其中底部是一个模拟计时器,秒针(针)像老秒表一样四处转动。我的表盘和针是在" onDraw(Canvas画布)"中绘制的.png文件,由我的GameLoopThread重复调用(这里没问题)。我通过测试的单独的锚点旋转针,这也很好。
问题:当计算并绘制针的新角度时,它会出现在曲面视图的顶部/左侧点,可能是(0,0)。虽然我需要它在我正在绘制我的表盘的底角!?
继承我的代码
private void rotateCalc() {
matrix = new Matrix();
newAngle++;
matrix.postRotate(newAngle, 95, 10);//anchor points(95,10) for rotation
}
@Override
public void onDraw(Canvas canvas) {
canvas.drawBitmap(dialimg, null, dstbmp, null);
canvas.drawBitmap(needle, null,dstneedle,null);
rotateCalc();
canvas.drawBitmap(needle, matrix, null);
}
我想这可能是因为当使用带有矩阵的.drawBitmap方法时,我无法传递Rect(demensions)或x,y(cordinates),我希望将旋转的Bitmap绘制到。
我是如何解决这个问题的?
答案 0 :(得分:1)
WOW!这很好用。继承我的代码,只是检查这个序列是否正常?没有特别的逻辑顺序,对吗?
private void rotateCalc() {
matrix = new Matrix();
i++;
matrix.postRotate(i, 145, 8);
matrix.postScale(0.5f, 0.5f);
matrix.postTranslate(149, 337);
}
最后一个问题,我发现Bitmaps有点不稳定,就像......我的意思是锯齿状,不是很平滑。可以做些什么呢?
我已经阅读了#Bit; Bitmap.Config.ARGB_8888",真的需要吗?如果是的话,你能举个例子吗?很多@pskink,你是一个很好的帮助
修改强> 在matrix.postScale(dx,dy)之后调用matrix.postRotate(angle,x,y)非常重要,因为如果先旋转,你必须根据你选择的原始图像来计算锚点。你的位图。我更喜欢缩放它,然后找出新的宽度/高度,然后决定我的锚点。
答案 1 :(得分:1)
与创建位图进行比较时,这种方式是否效率低,您可以在其中缩放它并在同一函数中应用矩阵?
之后是我们创建的新位图上的常规onDraw方法