studio programacion para móviles libro edición desarrollo curso aplicaciones android view size measure

android - programacion - Las vistas getWidth() y getHeight() devuelven 0



programacion android pdf 2017 (8)

He analizado las preguntas similares y he probado sus soluciones, pero no funcionó para mí. Intento tomar el ancho de una imageView, pero devuelve 0. Aquí está el código:

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

Puede alguien ayudarme con esto? Gracias


Debe usar: image1.getLayoutParams().width;


Está accediendo al ancho y alto de ImageViews antes de que se haya medido, o después de configurar su visibilidad en GONE.

image2.setVisibility(View.GONE);

Luego, getWidth () o getHeight () devolverán 0.,

También puede echar un vistazo a onWindowFocusChanged (), onSizeChanged () y onMeasure ():

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


Necesitas usar el método onSizechanged() .

Esto se llama durante el diseño cuando el tamaño de esta vista ha cambiado



Por favor, use un controlador y obtenga altura y anchura con esto con tiempo de retardo> = 10

Esto puede ser útil para su uso:

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


Tal vez debería llamar primero a View.measure (int, int).
Dado que el ancho y la altura no están definidos hasta que esta vista es dibujar. Puede llamar a medida a mano para imponer esta vista para calcular su tamaño;


puede usar OnGlobalLayoutListener para ImageView image1 para obtener el ancho y la altura exactos que ocupa la vista en el diseño ... como

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


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 aún no ha dibujado la imagen, por lo que no hay ancho ni altura de retorno. Puede usar una subclase para obtener el ancho de vista de imagen.

Aquí hay un enlace que le proporciona otros métodos fáciles:

¿Cómo obtener el ancho y la altura de un android.widget.ImageView?

¿Cómo obtener el ancho y el alto de una vista de imagen en Android?

Android ImageView devuelve getWidth, getHeight zero

Espero que esto te ayude.