在我的应用程序中,我在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);
}
}
答案 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 / 4
和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);
}
}
}