7

ビューを拡張してカスタム ウィジェットを作成しました。独立したピクセル単位でウィジェットの高さを定義したいと思います。ピクセル密度に目的の高さを掛けることでできると思いますが、その方法がわかりません。

私がこれまでに持っているもの(最小化):

public class Timeline extends View 
{

    @Override
    protected void onDraw(Canvas canvas) {
        //super.onDraw(canvas);
        int canvasWidth = canvas.getWidth();
        this.widgetWith = canvasWidth;


        this.setBackgroundGradientNoVideo();
        RectF rect = new RectF();
        rect.set(0, 0, canvasWidth, 50);
        //Dessin d'un rectangle de fond
        canvas.drawRoundRect(rect, 10, 10, this.paint);

    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        // TODO Auto-generated method stub
        //super.onMeasure(widthMeasureSpec, 50);
        this.setMeasuredDimension(widthMeasureSpec, 50);
        this.widgetWith = MeasureSpec.getSize(widthMeasureSpec);
    }
}

だから私は行を変更したい

this.setMeasuredDimension(widthMeasureSpec, 50);

rect.set(0, 0, canvasWidth, 50);

ピクセルに依存しないものに。

ありがとう

4

2 に答える 2

17

ピクセル値を掛けて、getResources().getDisplayMetrics().densityピクセルを密度に依存しないようにします。テキストを描画する場合は、代わりに scaledDensity を使用することをお勧めします。

密度 = mdpi では 1、hdpi では 1.5、ldpi では 0.75 だと思います。

答えを完成させるために、いくつかのソースコード:

ビューまたは画像を扱うときは、次のいずれかを使用します

int px = getResources().getDisplayMetrics().density * dp;  

または、テキストを扱う場合:

int px = getResources().getDisplayMetrics().scaledDensity * sp;
于 2011-08-11T15:21:25.920 に答える
13

dp 値から px 値を取得するには、次のように計算します。

int px = getResources().getDisplayMetrics().density * dp;

より少ないコードでこれを行うために、パラメーターとして dp 値を取る静的メソッドをどこかに配置することをお勧めします。たとえば、アプリの開始時に正しい密度値で初期化され、どこからでも使用できる静的メソッド「dipToPx(int dip)」を持つクラス「ResolutionHelper」を作成しました。

于 2011-08-11T15:22:53.047 に答える