0

在我的应用程序中,我在我的图像视图中设置图像。我只需要在该图像视图上放置一个标记。我在我的自定义图像视图类中使用 onDraw 函数进行此操作。问题是,例如,如果我将 x 位置和 y 位置分别设为 40。与在我的手机上运行相同的应用程序相比,上面图像中显示的标记位置是不同的药片。

我想要一个解决方案,这样当我给出坐标时,移动设备和平板电脑中图像上标记的位置就会出现相同的情况。

这是我的主要活动的代码:

public class PointOnImageActivity extends Activity 
{
    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_point_on_image);
        CustomImag ev= new CustomImag(this);
        ev.setBackgroundResource(R.drawable.stad);// set background
        setContentView(ev);
    }
}

这是我的自定义 imageview 类的代码:

public class CustomImag extends ImageView
{
        public CustomImag(Context context) 
        {
        super(context);
        }

        @Override
        public void onDraw(Canvas canvas) 
        {
            super.onDraw(canvas);
            Paint mPaint = new Paint();
            mPaint.setColor(Color.RED);
            canvas.drawCircle(40,40,10,mPaint);
         }
 }
4

2 回答 2

1

那是因为 40 是像素值,你实际上需要 40dp 代替。因此您可以动态地将 40dp 转换为 px 值,如下所示:

int pxValue1 = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40,  context.getResources()
                    .getDisplayMetrics());

int pxValue2 = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 10,  context.getResources()
                    .getDisplayMetrics());


 canvas.drawCircle(pxValue,pxValue,pxValue2,mPaint);
于 2013-07-25T06:59:27.197 回答
1

您必须View根据屏幕尺寸定位您的自定义。这样,无论您的应用显示什么尺寸的屏幕,您的定位都是相对的。

在您的onDraw(Canvas)方法中,您可以获得屏幕尺寸并使用它们绘制圆圈。在以下示例中(主要是您的代码),我将红色圆圈放在screen_width / 4and screen_height / 4

public class MyCustomImageViewActivity extends Activity{    

    CustomImag ev;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ev = new CustomImag(this);
        ev.setBackgroundResource(R.drawable.stad);// set background
        setContentView(ev);
    }

    public class CustomImag extends ImageView {
        Paint mPaint;

        public CustomImag(Context context) {
        super(context);
        mPaint = new Paint();
    }

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

        Point point = new Point();
        getWindowManager().getDefaultDisplay().getSize(point);

        mPaint.setColor(Color.RED);
        canvas.drawCircle(point.x / 4, point.y / 4, 10, mPaint);
        }
    }   
}
于 2013-07-25T07:28:12.120 回答