ページ 1 / 1
0しか取得できない
Posted: 2013年3月11日(月) 22:08
by ひよつこ
お久しぶりです。
今回もよろしくお願いします。
現在androidでビュアーアプリもどきを作成しています。
その中で、ViewFlipperの幅と高さを取得してから、表示する画像のリサイズをしたいのですが、
ViewFlipperにgetWidth()やgetHeight()を行っても0しか取得できません。
何が問題なのでしょうか。
Re: 0しか取得できない
Posted: 2013年3月11日(月) 23:28
by ISLe
Activity#onCreateとか、Viewが表示される前にサイズを取得しようとしているのでしょう。
View#onSizeChangedをオーバーライドするのが確実な方法ですが、スレッドを使って監視する方法もあります。
Re: 0しか取得できない
Posted: 2013年3月12日(火) 14:55
by ひよつこ
返信ありがとうございます。
確かにActivityのonResume()内でgetWidth()を使っていました。
そこでonSizeChanged()を使ってみようかと思いましたが、onSizeChanged()は
Activityからはオーバーライドできないのではないでしょうか。
どうかよろしくお願いします。
Re: 0しか取得できない
Posted: 2013年3月12日(火) 18:38
by ISLe
ひよつこ さんが書きました:そこでonSizeChanged()を使ってみようかと思いましたが、onSizeChanged()は
Activityからはオーバーライドできないのではないでしょうか。
もちろんViewFlipperを継承するんですよ。
サイズ取得だけじゃなくViewに関連するコードを継承したクラスにまとめると良いと思います。
Re: 0しか取得できない
Posted: 2013年3月12日(火) 23:59
by ひよつこ
返信ありがとうございます。
ViewFlipperを継承すればいいことはわかりましたが、
お恥ずかしいことにViewFlipperの継承がどのようなものかわかりません。
ViewFlipperを継承してonSizeChangedをオーバーライドする方法を教えていただけないでしょうか。
よろしくお願いします。
Re: 0しか取得できない
Posted: 2013年3月13日(水) 01:51
by ISLe
ひよつこ さんが書きました:ViewFlipperを継承してonSizeChangedをオーバーライドする方法を教えていただけないでしょうか。
メインアクティビティがActivityを継承するのと同じですよ。
コード:
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しか取得できない
Posted: 2013年3月13日(水) 14:59
by ひよつこ
返信ありがとうございます。
無事にViewFlipperを継承でき、onSizeChanged()内でViewFlipperの高さと幅を取得できました。
しかし、それとは別に問題が発生したため、別のトピックで質問させていただこうと思います。
そちらもよろしくお願いします。