Ответ 1
Вам нужно использовать метод onSizechanged().
Это называется во время компоновки, когда размер этого представления изменился
Я рассмотрел похожие вопросы и попробовал их решения, но это не сработало для меня. Я пытаюсь получить ширину изображения, но он возвращает 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);
}
}
}
Может ли кто-нибудь помочь мне с этим? Благодаря
Вам нужно использовать метод onSizechanged().
Это называется во время компоновки, когда размер этого представления изменился
Вы либо получаете доступ к ширине и высоте 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
}
Вы должны использовать: 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 еще не нарисовал изображение, поэтому никакая ширина или высота не возвращаются. Вы можете использовать подкласс для получения ширины изображения.
Вот некоторая ссылка предоставляет вам еще несколько простых способов:
Как получить ширину и высоту файла android.widget.ImageView?
Как получить ширину и высоту изображения в андроиде?
Android ImageView возвращает getWidth, getHeight zero
Надеюсь, что это поможет вам.
вы можете использовать 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);
}
});
Кстати, представления не получают размер до тех пор, пока не будут сделаны шаги измерения. См. Эту ссылку:
Возможно, сначала вы должны вызвать View.measure(int, int).
Поскольку ширина и высота не определены до тех пор, пока это изображение не будет показано. Вы можете вызвать меру вручную, чтобы обеспечить выполнение этого представления, чтобы вычислить его размер;
Пожалуйста, используйте Обработчик и получите высоту и ширину при этом с временем задержки >= 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);
}