5

xml レイアウトに追加して、4:3 (長さ対幅) の固定サイズ比を持つ surfaceview (surfaceview を拡張するカスタム クラス) を作成しようとしています。

長さまたは幅のいずれかで親のできるだけ多くを埋めたいのですが、全長または幅に達すると、前に言ったように固定サイズ比になるように反対側が調整されます。

どうすればそのようなことを達成できますか?

ありがとう。

4

2 に答える 2

5

アクティビティの onCreate メソッドで、画面の解像度を読み取り、レイアウトの幅と高さを設定できます。

RealtiveLayout を使用していると仮定した例:

private void create43RatioSurface() {
    SurfaceView surfaceView43 = (SurfaceView)findViewById(R.id.surfaceView1);

    DisplayMetrics metrics = getResources().getDisplayMetrics();
    int height = 0;
    int width = 0;

    if(metrics.widthPixels < metrics.heightPixels){
        width = metrics.widthPixels;
        height= (metrics.widthPixels/4) * 3 ;
    } else {
        height= metrics.heightPixels;
        width= (metrics.heightPixels/4) * 3 ;
    }

    RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(width, height);
    layoutParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE);
    layoutParams.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE);

    surfaceView43.setLayoutParams(layoutParams);        
}
于 2012-10-26T07:46:44.870 に答える
2

これは一種のハッキーかもしれませんが、空のイメージ ビューをサーフェス ビューの一種のフレームとして配置することもできます。今、狂気を説明するために

1)必要なプロポーションに合わせて、すべて透明なイメージ アセットを作成します。これをゴースト イメージと呼びましょう (おそらく、これも非表示にするのが最善です)

2)相対レイアウトを使用し、イメージビューを高さと幅に match_parent を使用して相対レイアウトに配置し、スケールタイプ CENTER_INSIDE または CENTER_CROP を使用して、巨大なアセットを作成した場合

3)画像ビューの後に表面ビューをレイアウトに追加し、上/下/右/左を画像ビューに合わせます

この実装を試したことはありませんが、どの画面でも必要な比率が得られるはずです。

于 2012-10-26T08:06:12.137 に答える