1. ホーム
  2. java

[解決済み] ビューの getWidth() と getHeight() は 0 を返します。

2022-03-16 09:32:26

質問

私は、アンドロイドプロジェクトのすべての要素を動的に作成しています。ボタンの幅と高さを取得して、そのボタンを回転させることができるようにしようとしています。私はちょうどアンドロイド言語での作業方法を学ぼうとしています。しかし、それは0を返します。

いろいろ調べてみたところ、この処理は onCreate() メソッドを使用します。もしどなたか、その方法の例を教えていただけると助かります。

以下は私の現在のコードです。

package com.animation;

import android.app.Activity;
import android.os.Bundle;
import android.view.animation.Animation;
import android.view.animation.LinearInterpolator;
import android.view.animation.RotateAnimation;
import android.widget.Button;
import android.widget.LinearLayout;

public class AnimateScreen extends Activity {


//Called when the activity is first created.
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    LinearLayout ll = new LinearLayout(this);

    LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
    layoutParams.setMargins(30, 20, 30, 0);

    Button bt = new Button(this);
    bt.setText(String.valueOf(bt.getWidth()));

    RotateAnimation ra = new RotateAnimation(0,360,bt.getWidth() / 2,bt.getHeight() / 2);
    ra.setDuration(3000L);
    ra.setRepeatMode(Animation.RESTART);
    ra.setRepeatCount(Animation.INFINITE);
    ra.setInterpolator(new LinearInterpolator());

    bt.startAnimation(ra);

    ll.addView(bt,layoutParams);

    setContentView(ll);
}

よろしくお願いします。

解決方法は?

を呼び出しています。 getWidth() が早すぎるのです。UIはまだサイズ調整されておらず、画面上にレイアウトされていません。

アニメーション化されたウィジェットは、クリック可能な領域を変更しないので、ボタンがどのように回転しても、元の方向でクリックに応答します。

とはいうものの、この場合 ディメンションリソース を使用してボタンのサイズを定義し、レイアウトファイルとソースコードからそのディメンションリソースを参照することで、この問題を回避することができます。