Android - 像素逢低

时间:2011-04-08 07:28:45

标签: android

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

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

任何和所有帮助表示赞赏。

4 个答案:

答案 0 :(得分:13)

我的库中有三个有用的功能......

获取屏幕密度

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);
}

将像素转换为逢低。

public static int convertPixtoDip(int pixel){
    float scale = getDensity();
    return (int)((pixel - 0.5f)/scale);
}

答案 1 :(得分:12)

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);

答案 2 :(得分:6)

这是一种非常简单的方法。

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

答案 3 :(得分:5)

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