ImageView.getWidth () renvoie 0

Je reçois la largeur d'imageView. Voici un code.

Fichier xml:

  • Plate-forme croisée Java? Android et ordinateur de bureau
  • À propos de RenderScript
  • Mesurer un ViewPager
  • Comment dessiner la classe Button dans libgdx
  • L'émulateur Android ne peut pas être démarré
  • Enregistrement du temps limite de l'Android avec l'intention
  • <ImageView android:id="@+id/img" android:layout_width="200dp" android:layout_height="200dp" /> 

    Activité:

     @Override protected void onResume() { super.onResume(); ImageView img = (ImageView) findViewById(R.id.img); Log.d(TAG, "width : " + img.getWidth()); } 

    Je ne veux pas utiliser le code ci-dessous car j'ai besoin de placer ce code dans de nombreux endroits.

     ViewTreeObserver vto = img.getViewTreeObserver(); vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { public boolean onPreDraw() { ImageView img = (ImageView) findViewById(R.id.img); Log.d(TAG, "width : " + img.getWidth()); return true; } }); 

    Ma solution de contournement: en fait, plus tard, je n'ai pas besoin d'ajouter ce code dans une activité. Je l'ai ajouté à une classe hors activité et, au lieu de la largeur d'ImageView, j'ai utilisé la largeur de l'image Bitmap et je n'ai plus ce problème.

  • Menu de menu de navigation éléments sélectionnés dans différents groupes
  • Comment les valeurs Gravity affectent PopupWindow.showAtLocation () dans Android
  • Android Compass qui peut compenser l'inclinaison et le pitch
  • La connexion SQLite a été filtrée bien que tout soit fermé
  • Android Studio voyant quels fichiers une modification a été appliquée à
  • Styling a SearchView dans Android Action Bar
  • 3 Solutions collect form web for “ImageView.getWidth () renvoie 0”

    Où vous appelez getWidth() et getHeight() sur ImageView? Si vous appelez depuis onCreate() en activité, cela ne fonctionnera pas. Vous devez attendre que la fenêtre d'activité soit jointe, puis appeler getWidth() and getHeight() sur ImageView. Vous pouvez essayer d'appeler getWidth() and getHeight() partir de la méthode onWindowFocusChanged() de votre activité.

    Appeler onWindowFocusChanged comme ça

     public void onWindowFocusChanged(boolean hasFocus) { // TODO Auto-generated method stub super.onWindowFocusChanged(hasFocus); if (hasFocus) { ImageView img = (ImageView) findViewById(R.id.img); Log.d(TAG, "width : " + img.getWidth()); } } 

    Puisque vous avez déjà une image "fixed" widthView de 200dp pourquoi ne pas simplement le mettre dans dimens.xml

     <dimen name="image_width">200dp</dimen> 

    Et ensuite simplement

     int width = (int) getResources().getDimension(R.dimen.image_Width) 

    Bien, j'ai trouvé de nombreuses questions liées qui sont dupliquées à cette question, et la plupart des réponses n'étaient pas adaptées à mon cas.

    J'ai trouvé une solution qui peut convenir à la vôtre pour moi. Simplement, j'ai créé un ImageView personnalisé et j'ai ajouté un nouveau rappel OnSizeChangedCallback appelé chaque fois que la taille de la vue est changée en valeurs non nulles.

    Voici un exemple de code de mon propre:

     public class AvatarImageView extends ImageView{ private OnImageViewSizeChanged sizeCallback = null; public AvatarImageView(Context context) { super(context); } public AvatarImageView(Context context, AttributeSet attrs) { super(context, attrs); } public AvatarImageView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { if (w == 0 || h == 0) { return; } else{ if(sizeCallback != null) sizeCallback.invoke(this, w, h); } } public void setOnImageViewSizeChanged(OnImageViewSizeChanged _callback){ this.sizeCallback = _callback; if (getWidth() != 0 && getHeight() != 0) { _callback.invoke(this, getWidth(), getHeight()); } } public interface OnImageViewSizeChanged{ public void invoke(ImageView v, int w, int h); } } 

    Et vous pouvez simplement l'utiliser comme suit:

     final AvatarImageView avatarIcon = (AvatarImageView) findViewById(R.id.avatarImg); avatarIcon.setOnImageViewSizeChanged(new AvatarImageView.OnImageViewSizeChanged() { @Override public void invoke(ImageView v, final int w, final int h) { // Do whatever you want with w and h which are non zero values ... } }); 

    questions connexes:

    1. Views-getwidth-and-getheight-return-0
    2. Android-imageview-return-getwidth-getheight-zero
    3. Android-get-width-returns-0
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.