自定义 Circlular seek arc 以将位图放置在给定的进度级别
Customising Circlular seek arc to place bitmaps at given progress levels
当前
预计
我希望获得比图片中更好的结果,
情况。
给定一个进度值 X,我想获得进度的 x 和 y 坐标,以便我可以在 circular seekarc 周围绘制一个标志。
for (int i = 0; i < positionList.size(); i++) {
xPost = (float)(mArcRect.centerX() + mArcRadius* Math.cos(Math.toRadians(calculatePointerAngle((positionList.get(i).getPosition()+270)))));
yPost = (float) (mArcRect.centerY() + mArcRadius * Math.sin(Math.toRadians(calculatePointerAngle((positionList.get(i).getPosition()+270)))));
setflagX(xPost);
setflagxY(yPost);
points.add(new Points(xPost, yPost));
// }
}
之后我使用自定义 class 绘制标志
.......
`
@Override
public void onDraw(Canvas canvas) {
//Draw the flag
final Resources res = getResources();
// while (coordinates.iterator().hasNext()){
for (int i = 0; i < coordinates.size(); i++) {
if (i == 0) {
bm = BitmapFactory.decodeResource(res, R.drawable.ic_flag_red);
canvas.drawBitmap(bm, coordinates.get(i).getX(), coordinates.get(i).getY(), null);
} else {
bm = BitmapFactory.decodeResource(res, R.drawable.ic_flag_blue);
canvas.drawBitmap(bm, coordinates.get(i).getX(), coordinates.get(i).getY(), null);
}
}
}`
任何关于如何修复偏移的建议...我对圆外的点 bing 没意见
我觉得你做的是对的,但是你画的位图错了。
位图从 (left, top) 绘制到 (left + width, right + height) 而你没有考虑到这一点。
canvas.drawBitmap(bm,
coordinates.get(i).getX() - bm.getWidth() / 2,
coordinates.get(i).getY() - bm.getHeight() / 2, null);
应该可以解决您的问题
当前
预计
for (int i = 0; i < positionList.size(); i++) {
xPost = (float)(mArcRect.centerX() + mArcRadius* Math.cos(Math.toRadians(calculatePointerAngle((positionList.get(i).getPosition()+270)))));
yPost = (float) (mArcRect.centerY() + mArcRadius * Math.sin(Math.toRadians(calculatePointerAngle((positionList.get(i).getPosition()+270)))));
setflagX(xPost);
setflagxY(yPost);
points.add(new Points(xPost, yPost));
// }
}
之后我使用自定义 class 绘制标志
....... `
@Override
public void onDraw(Canvas canvas) {
//Draw the flag
final Resources res = getResources();
// while (coordinates.iterator().hasNext()){
for (int i = 0; i < coordinates.size(); i++) {
if (i == 0) {
bm = BitmapFactory.decodeResource(res, R.drawable.ic_flag_red);
canvas.drawBitmap(bm, coordinates.get(i).getX(), coordinates.get(i).getY(), null);
} else {
bm = BitmapFactory.decodeResource(res, R.drawable.ic_flag_blue);
canvas.drawBitmap(bm, coordinates.get(i).getX(), coordinates.get(i).getY(), null);
}
}
}`
任何关于如何修复偏移的建议...我对圆外的点 bing 没意见
我觉得你做的是对的,但是你画的位图错了。
位图从 (left, top) 绘制到 (left + width, right + height) 而你没有考虑到这一点。
canvas.drawBitmap(bm,
coordinates.get(i).getX() - bm.getWidth() / 2,
coordinates.get(i).getY() - bm.getHeight() / 2, null);
应该可以解决您的问题