Подтвердить что ты не робот

Просмотр getWidth() и getHeight(), возвращающих 0

Я рассмотрел похожие вопросы и попробовал их решения, но это не сработало для меня. Я пытаюсь получить ширину изображения, но он возвращает 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);
    }
}
}

Может ли кто-нибудь помочь мне с этим? Благодаря

4b9b3361

Ответ 1

Вам нужно использовать метод onSizechanged().

Это называется во время компоновки, когда размер этого представления изменился

Ответ 2

Вы либо получаете доступ к ширине и высоте 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
 }

Ответ 3

Вы должны использовать: image1.getLayoutParams().width;

Ответ 4

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 еще не нарисовал изображение, поэтому никакая ширина или высота не возвращаются. Вы можете использовать подкласс для получения ширины изображения.

Вот некоторая ссылка предоставляет вам еще несколько простых способов:

Как получить ширину и высоту файла android.widget.ImageView?

Как получить ширину и высоту изображения в андроиде?

Android ImageView возвращает getWidth, getHeight zero

Надеюсь, что это поможет вам.

Ответ 5

вы можете использовать OnGlobalLayoutListener для ImageView image1, чтобы вы могли получить точную ширину и высоту, занимаемую видом в макете... как

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);
                    }
                });

Ответ 7

Возможно, сначала вы должны вызвать View.measure(int, int).
Поскольку ширина и высота не определены до тех пор, пока это изображение не будет показано. Вы можете вызвать меру вручную, чтобы обеспечить выполнение этого представления, чтобы вычислить его размер;

Ответ 8

Пожалуйста, используйте Обработчик и получите высоту и ширину при этом с временем задержки >= 10

Это может быть полезно для использования:

@Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        getHeight();

    }

    private void getHeight() {
        // TODO Auto-generated method stub
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(getApplicationContext(), "Height:" + mAnimationView.getMeasuredHeight(),
                        Toast.LENGTH_SHORT).show();
            }
        }, 10L);

    }