1

サンプル

検索するとたくさんの質問があります。答えは、画面の幅/高さを示しています。必要ありません!

画像ビュー、つまり白い背景の車に使用できるスペースが必要です。入手方法は?

上部の装飾バーも、下部/右側のメニューバーも、時間とバッテリーを含む画面全体のサイズも必要ありません。

これが私がこれまでに試したことです:

public class MainActivity extends Activity {

    private SVGImageView svgImageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.activity_main);

        svgImageView = new SVGImageView(this);
        svgImageView.setImageAsset("my.svg");

        // Set the ImageView as the content view for the Activity
        setContentView(svgImageView);
    }



    @Override
    protected void onPostResume() {
        super.onPostResume();
        int w = getWindow().getDecorView().getWidth();
        int h = getWindow().getDecorView().getHeight();
        Log.d("DisplayMetrics","w2:"+w+", h2:"+h);// 0 and 0
    }



    @Override
    protected void onStart() {
        super.onStart();

        DisplayMetrics metrics = getResources().getDisplayMetrics();
        int width = metrics.widthPixels;
        int height = metrics.heightPixels;
        //int bottom = svgImageView.getBottom();

        int w = svgImageView.getWidth();//0
        int h = svgImageView.getHeight();//0

        Log.d("DisplayMetrics", "width: "+width+ ", height:"+height+", w:"+w+", h:"+h);
        // landscape: 1280 x 752.  Real 1280x700
        // portrait: 800 x 1232. Real 800x1177


    }

SVGImageView は ImageView の子です SVG についてもっと知りたい方はこちらをご覧ください。

4

1 に答える 1

0

受け入れられた回答は、これと同じ幅と高さを与える必要があります。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //setContentView(R.layout.activity_main);

    svgImageView = new SVGImageView(this){

        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
            int canvasH = canvas.getHeight();
            int canvasW = canvas.getWidth();
            Log.d("DisplayMetrics", "canvasW:"+canvasW + ", canvasH: "+canvasH);// Portrait 800 x 1176,  Landscape 1280 x 696,                  
        }

アクティビティのソースを確認しています

public void setContentView(View view) {
    getWindow().setContentView(view);
}

mWindow には必要なデータがあると思います。問題は、いつどのように入手するかです。

残念ながら、それは抽象メソッドです:

public abstract void setContentView(View view);

しかし、onSizeChangedat new SVGImageView(this) をオーバーライドすると、そこに数値が適切に表示されます。

PhoneWindowは今、私にとっての実装です:

// This is the top-level view of the window, containing the window decor.
private DecorView mDecor;

// This is the view in which the window contents are placed. It is either
// mDecor itself, or a child of mDecor where the contents go.
private ViewGroup mContentParent;


private final class DecorView extends FrameLayout implements RootViewSurfaceTaker

アクティビティのライフサイクル

私の通話記録:

myActivity.onPostResume()
myContentView.onSizeChanged()
myContentView.onDraw();

=>レイアウトリスナーにサブスクライブするか、トップコンポーネントをオーバーライドする必要がありますonSizeChanged

于 2013-09-07T12:28:55.173 に答える