J'ai regardé les questions similaires et essayé leurs solutions mais cela n'a pas fonctionné pour moi. J'essaie de prendre la largeur d'une imageView, mais elle renvoie 0. Voici le code:
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);
}
}
}
Est-ce que quelqu'un peut m'aider avec ça? Merci
Vous devez utiliser la méthode onSizechanged () .
Ceci est appelé pendant la mise en page lorsque la taille de cette vue a changé
Vous accédez soit à la largeur et à la hauteur d'ImageViews avant qu'elle ait été mesurée, ou après avoir défini sa visibilité sur GONE.
image2.setVisibility(View.GONE);
GetWidth () ou getHeight () renverra alors 0.,
Vous pouvez également consulter onWindowFocusChanged (), onSizeChanged () et onMeasure ():
@Override
public void onWindowFocusChanged(boolean focus) {
super.onWindowFocusChanged(focus);
// get the imageviews width and height here
}
Vous devez utiliser: image1.getLayoutParams().width;
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 n'a pas encore dessiné l'image, donc pas de retour de largeur ou de hauteur. Vous pouvez utiliser une sous-classe pour obtenir la largeur de la vue d'image.
Voici un lien qui vous propose d'autres méthodes simples:
Comment obtenir la largeur et la hauteur d'un Android.widget.ImageView?
Comment obtenir la largeur et la hauteur d'une vue d'image dans Android?
Android ImageView renvoie getWidth, getHeight zero
J'espère que cela vous aidera.
vous pouvez utiliser OnGlobalLayoutListener pour l'image ImageView1 afin d'obtenir la largeur et la hauteur exactes occupées par la vue dans la mise en page ... comme
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);
}
});
Soit dit en passant, les vues ne sont pas dimensionnées tant que les étapes de mesure n'ont pas été effectuées. Voir ce lien:
Vous devriez peut-être d'abord appeler View.measure (int, int).
Puisque la largeur et la hauteur ne sont pas définies tant que cette vue n'est pas dessinée. Vous pouvez appeler la mesure à la main pour appliquer cette vue afin de calculer sa taille;