自定义 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);

应该可以解决您的问题