我有一张绝对布局元素的面部图像(250px X 250px)。我目前得到用户的触摸坐标,并使用一些数学计算被触摸的内容(例如鼻子),然后相应地做一些事情。
我的问题是如何缩放它以适应可用的屏幕宽度。如果我将图像(在xml中)设置为fill_parent,那么坐标就会消失。这可以通过将触摸坐标转换为倾斜(如果是这样,如何)来解决,或者我需要获得屏幕宽度(再次转换为逢低)并使用更多数学来解决坐标问题?
任何和所有帮助表示赞赏。
答案 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);
}