Android画面に関する知識のまとめ

3631 ワード

Androidシステムの開放性のため、多くの携帯電話メーカーが独自のブランドの製造に専念しているため、Androidの携帯電話の画面は大きさも解像度も様々で、Androidで絵を描く際に異なる携帯電話で絵を描く視覚的な一貫性を保証することが難しい.以下の知識をまとめることで、これらの問題を解決するのに便利です.
一、スクリーンパラメータ
携帯電話の画面では、このいくつかのパラメータに注目しています.
1 . 画面サイズ
このパラメータは私たちの携帯電話の対角線の長さを指し、その単位は一般的に寸です.
2 . 解像度
このパラメータは、携帯電話の画面上の画素点の数、例えば、長方向と幅方向の画素点の数、例えば720×1280は携帯電話の解像度を指す.
3 . PPI
PPI(Pixels Per Inch)は、1インチあたりの画素数を指し、DPI(Dot Per Inch)ともなる.その算出方法は ÷ ( )二、システムスクリーン密度
各Android携帯電話メーカーの携帯電話には様々なサイズと画素密度の画面が存在するため、Androidシステムが様々なDPIの画面を満たすことは不可能であるため、Androidシステムは携帯電話の固定DPIとしていくつかの標準的なDPI値を定義している.次の表に示します.
みつど
ldpi
mdpi
hdpi
xhdpi
xxhdpi
みつどち
120
160
240
320
480
解像度
240×320
320×480
480×800
720×1280
1080×1920
三、独立画素密度dp
さまざまな画面密度が異なるため、同じ画素サイズが異なる密度の携帯電話で表示長さが異なるため、Androidシステムは解決策を提供しています.
mdpiおよび密度160のスクリーンを基準として、この密度スクリーンでは1 dp=1 px、他の密度のスクリーンでは320密度のスクリーンでは1 dp=2 pxと比例換算するので、各解像度の換算割合は3 : 4 : 6 : 8 : 12となる.これにより、異なる密度の携帯電話の画面の表示問題が解決されます.
四、単位変換関数パッケージ
プログラムでは、単位dpsppxの間を変換する必要があります.次に、これらの変換を実現するためのツールクラスを書きます.
/**
 * Created by szh on 2017/2/3.
 * Android         
 */

public class DisplayUtil {
    /**
     *  px   dp
     * @param px
     * @return
     */
    public static int pxTodp(Context context, float px){
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (px / scale + 0.5);
    }

    /**
     *  dp   px
     * @param context
     * @param dp
     * @return
     */
    public static int dpTopx(Context context, float dp){
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (dp * scale + 0.5);
    }

    /**
     *  px   sp
     * @param context
     * @param px
     * @return
     */
    public static int pxTosp(Context context, float px){
        final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
        return (int) (px / fontScale + 0.5);
    }

    /**
     *  sp   px
     * @param context
     * @param sp
     * @return
     */
    public static int spTopx(Context context, float sp){
        final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
        return (int) (sp * fontScale + 0.5);
    }

    /**
     *  dp   px
     * @param dp
     * @return
     */
    public static int dpTopx(float dp, Context context){
        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp,
                context.getResources().getDisplayMetrics());
    }

    public static int spTopx(float sp, Context context){
        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, sp, context.getResources().getDisplayMetrics());
    }
}

上のコードを見ると、前の4つの方法はdpsppxの間の変換を実現し、後の2つの方法は再ロードされ、TypedValueapplyDimension()方法を使用してdpspからpxへの変換を実現した.
1 . まず、最初の4つの方法の原理を説明します.context.getResources().getDisplayMetrics().density;によって得られるのは、現在のスクリーンの密度値と160という値の1つの割合であり、例えばスクリーンの現在の密度値が320であれば、得られる値は2である.context.getResources().getDisplayMetrics().scaledDensity;によって得られるのも1つのスケール値であるが、このスケールはフォントのスケールに用いられる.
2 . 最後の2つの方法のうちのapplyDimension()方法については、特に注意しなければならない.applyDimension()この方法の最初のパラメータは、変換される値の単位であり、変換された結果はすべて画素値であり、すなわち、他の単位の値をAndroid内部で使用される画素値に変換することができる.
以上がAndroid画面に関する知識点のまとめであり、必要な人を助けてほしい.