ページ 11

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の高さと幅を取得できました。

しかし、それとは別に問題が発生したため、別のトピックで質問させていただこうと思います。

そちらもよろしくお願いします。