标记位置根据设备屏幕宽度而变化

时间:2013-07-25 06:48:21

标签: android android-canvas

在我的应用程序中,我在imageview中设置了一个图像。我只需要在该imageview上放置一个标记。我在我的自定义图像视图类中使用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);
         }
 }

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

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

onDraw(Canvas)方法中,您可以获取屏幕尺寸并使用它们绘制圆圈。在以下示例中(主要是您的代码),我将红色圆圈放在screen_width / 4screen_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);
        }
    }   
}