同様の質問を見て、その解決策を試しましたが、うまくいきませんでした。 imageViewの幅を取得しようとしましたが、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はまだ画像を描画していないため、幅や高さは返されません。サブクラスを使用して、imageviewの幅を取得できます。
他の簡単な方法を提供するリンクを次に示します。
Android.widget.ImageViewの幅と高さを取得する方法
Android ImageViewがgetWidth、getHeight zeroを返す
これがお役に立てば幸いです。
imageView image1にOnGlobalLayoutListenerを使用すると、レイアウト内のビューが占める正確な幅と高さを取得できます。
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)を呼び出す必要があります。
このビューが描画されるまで幅と高さは定義されないため。手動でmeasureを呼び出して、このビューを強制してサイズを計算できます。