Android – 像素逢低

我有一个绝对布局元素的面部图像(250px X 250px)。 我目前得到用户的触摸坐标,并使用一些数学计算被触摸的内容(例如鼻子),然后相应地做一些事情。

我的问题是如何缩放它以适应可用的屏幕宽度。 如果我将图像(在xml中)设置为fill_parent,那么坐标就会消失。 这可以通过将触摸坐标转换为倾斜(如果是这样,如何)来解决,或者我需要获得屏幕宽度(再次转换为逢低)并使用更多数学来解决坐标问题?

任何和所有帮助赞赏。

pixels = dps * (density / 160)

(density / 160)因子称为密度比例因子,可以从Display Metrics对象中以Java格式检索。 您应该做的是按照dips (与密度为160的屏幕上的像素相同)存储鼻子的位置等,然后根据您运行的屏幕将dips转换为像素:

 final static int NOSE_POSITION_DP = 10; final float scale = getContext().getResources().getDisplayMetrics().density; final int nosePositionPixels = (int) (NOSE_POSITION_DP * scale + 0.5f); 

我的库中有三个有用的function……

获得屏幕密度

 public static float getDensity(Context context){ float scale = context.getResources().getDisplayMetrics().density; return scale; } 

将Dip转换为像素。

 public static int convertDiptoPix(int dip){ float scale = getDensity(); return (int) (dip * scale + 0.5f); } 

将像素转换为Dips。

 public static int convertPixtoDip(int pixel){ float scale = getDensity(); return (int)((pixel - 0.5f)/scale); } 
 public int getDip(int pixel) { float scale = getBaseContext().getResources().getDisplayMetrics().density; return (int) (pixel * scale + 0.5f); } 

这样做的一种非常简单的方法。

 int value = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, 250, (mContext).getResources().getDisplayMetrics());