お久しぶりです。
今回もよろしくお願いします。
現在androidでビュアーアプリもどきを作成しています。
その中で、ViewFlipperの幅と高さを取得してから、表示する画像のリサイズをしたいのですが、
ViewFlipperにgetWidth()やgetHeight()を行っても0しか取得できません。
何が問題なのでしょうか。
0しか取得できない
Re: 0しか取得できない
Activity#onCreateとか、Viewが表示される前にサイズを取得しようとしているのでしょう。
View#onSizeChangedをオーバーライドするのが確実な方法ですが、スレッドを使って監視する方法もあります。
View#onSizeChangedをオーバーライドするのが確実な方法ですが、スレッドを使って監視する方法もあります。
-
ひよつこ
Re: 0しか取得できない
返信ありがとうございます。
確かにActivityのonResume()内でgetWidth()を使っていました。
そこでonSizeChanged()を使ってみようかと思いましたが、onSizeChanged()は
Activityからはオーバーライドできないのではないでしょうか。
どうかよろしくお願いします。
確かにActivityのonResume()内でgetWidth()を使っていました。
そこでonSizeChanged()を使ってみようかと思いましたが、onSizeChanged()は
Activityからはオーバーライドできないのではないでしょうか。
どうかよろしくお願いします。
Re: 0しか取得できない
もちろんViewFlipperを継承するんですよ。ひよつこ さんが書きました:そこでonSizeChanged()を使ってみようかと思いましたが、onSizeChanged()は
Activityからはオーバーライドできないのではないでしょうか。
サイズ取得だけじゃなくViewに関連するコードを継承したクラスにまとめると良いと思います。
-
ひよつこ
Re: 0しか取得できない
返信ありがとうございます。
ViewFlipperを継承すればいいことはわかりましたが、
お恥ずかしいことにViewFlipperの継承がどのようなものかわかりません。
ViewFlipperを継承してonSizeChangedをオーバーライドする方法を教えていただけないでしょうか。
よろしくお願いします。
ViewFlipperを継承すればいいことはわかりましたが、
お恥ずかしいことにViewFlipperの継承がどのようなものかわかりません。
ViewFlipperを継承してonSizeChangedをオーバーライドする方法を教えていただけないでしょうか。
よろしくお願いします。
Re: 0しか取得できない
メインアクティビティがActivityを継承するのと同じですよ。ひよつこ さんが書きました:ViewFlipperを継承してonSizeChangedをオーバーライドする方法を教えていただけないでしょうか。
import android.content.Context;
import android.util.AttributeSet;
import android.widget.ViewFlipper;
public class MyViewFlipper extends ViewFlipper
{
public MyViewFlipper(Context context) {
super(context);
}
public MyViewFlipper(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
// w: 新しい幅
// h: 新しい高さ
}
}
ViewFlipperの替わりにMyViewFlipperを使えば追加したコードを呼び出すことができます。
-
ひよつこ
Re: 0しか取得できない
返信ありがとうございます。
無事にViewFlipperを継承でき、onSizeChanged()内でViewFlipperの高さと幅を取得できました。
しかし、それとは別に問題が発生したため、別のトピックで質問させていただこうと思います。
そちらもよろしくお願いします。
無事にViewFlipperを継承でき、onSizeChanged()内でViewFlipperの高さと幅を取得できました。
しかし、それとは別に問題が発生したため、別のトピックで質問させていただこうと思います。
そちらもよろしくお願いします。