Android - 像素逢低

Roo*_*eyl 5 android

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

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

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

Jor*_*sys 13

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

获得屏幕密度

public static float getDensity(Context context){
    float scale = context.getResources().getDisplayMetrics().density;       
    return scale;
}
Run Code Online (Sandbox Code Playgroud)

将Dip转换为像素.

public static int convertDiptoPix(int dip){
    float scale = getDensity();
    return (int) (dip * scale + 0.5f);
}
Run Code Online (Sandbox Code Playgroud)

将像素转换为Dips.

public static int convertPixtoDip(int pixel){
    float scale = getDensity();
    return (int)((pixel - 0.5f)/scale);
}
Run Code Online (Sandbox Code Playgroud)


Jos*_*arl 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);
Run Code Online (Sandbox Code Playgroud)

  • 在`(NOSE_POSITION_DP*scale + 0.5f)`中,0.5f只是一种舍入到下一个整数的方法吗? (4认同)

Ali*_*ran 6

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

int value = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, 250, (mContext).getResources().getDisplayMetrics());
Run Code Online (Sandbox Code Playgroud)


Vin*_*raj 5

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