web-dev-qa-db-ja.com

ビューのgetWidth()およびgetHeight()が0を返します

同様の質問を見て、その解決策を試しましたが、うまくいきませんでした。 imageViewの幅を取得しようとしましたが、0を返します。コードは次のとおりです。

public class MainActivity extends Activity {
private ImageView image1;   
float centerX,centerY;
private ImageView image2;
private boolean isFirstImage = true;

@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.rotate);
    image1 = (ImageView) findViewById(R.id.ImageView01);
    image2 = (ImageView) findViewById(R.id.ImageView02);
    image2.setVisibility(View.GONE);

    if (isFirstImage) {
        applyRotation(0, 90);
        isFirstImage = !isFirstImage;
    }   
}   

private void applyRotation(float start, float end) {


            centerX=image1.getWidth()/2.0f;
    centerY=image1.getHeight()/2.0f;
    final Flip3dAnimation rotation =

    new Flip3dAnimation(start, end,centerX , centerY);
    rotation.setDuration(500);
    rotation.setFillAfter(true);
    rotation.setInterpolator(new AccelerateInterpolator());
    rotation.setAnimationListener(new DisplayNextView(isFirstImage, image1,
            image2));

    if (isFirstImage)
    {
        image1.startAnimation(rotation);
    } else {
        image2.startAnimation(rotation);
    }
}
}

誰もこれで私を助けることができますか?ありがとう

20
yrazlik

onSizechanged() メソッドを使用する必要があります。

これは、このビューのサイズが変更されたときにレイアウト中に呼び出されます

20
Kerry

ImageViewsの幅と高さにアクセスしています測定する前、または可視性をGONEに設定した後

image2.setVisibility(View.GONE);

次に、getWidth()またはgetHeight()は0を返します。

OnWindowFocusChanged()、onSizeChanged()、onMeasure()もご覧ください。

 @Override
 public void onWindowFocusChanged(boolean focus) {
    super.onWindowFocusChanged(focus);
    // get the imageviews width and height here
 }
10
Philipp Jahoda

image1.getLayoutParams().width;を使用する必要があります

10
Incredible
public class GETImageView extends ImageView {

public GETImageView (Context context, AttributeSet attrs) {
    super(context, attrs);
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    Drawable d = getDrawable();

    if (d != null) {
        int width = MeasureSpec.getSize(widthMeasureSpec);
    }
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}

ImageViewはまだ画像を描画していないため、幅や高さは返されません。サブクラスを使用して、imageviewの幅を取得できます。

他の簡単な方法を提供するリンクを次に示します。

Android.widget.ImageViewの幅と高さを取得する方法

アンドロイドで画像ビューの幅と高さを取得する方法?

Android ImageViewがgetWidth、getHeight zeroを返す

これがお役に立てば幸いです。

5
Sonny Ng

imageView image1にOnGlobalLayoutListenerを使用すると、レイアウト内のビューが占める正確な幅と高さを取得できます。

image1 = (ImageView) findViewById(R.id.ImageView01);
        ViewTreeObserver viewTreeObserver = image1.getViewTreeObserver();
        viewTreeObserver
                .addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
                    @Override
                    public void onGlobalLayout() {
                        if (isFirstImage) {
                            applyRotation(0, 90);
                            isFirstImage = !isFirstImage;
                        } 
                        if (Android.os.Build.VERSION.SDK_INT >= Android.os.Build.VERSION_CODES.JELLY_BEAN)
                            image1.getViewTreeObserver()
                                    .removeOnGlobalLayoutListener(this);
                        else
                            image1.getViewTreeObserver()
                                    .removeGlobalOnLayoutListener(this);
                    }
                });
2
Santhosh

ちなみに、測定ステップが実行されるまで、ビューのサイズは変更されません。こちらのリンクをご覧ください:

ViewのgetWidth()およびgetHeight()は0を返します

1
Adam Ruhl

たぶん、最初にView.measure(int、int)を呼び出す必要があります。
このビューが描画されるまで幅と高さは定義されないため。手動でmeasureを呼び出して、このビューを強制してサイズを計算できます。

0
landerlyoung