2

どの画面サイズでも表示できるようにしたいカスタムビューを作成しました。

onMeasureをオーバーライドしました:

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);

    int parentWidth = MeasureSpec.getSize(widthMeasureSpec);
    int parentHeight = MeasureSpec.getSize(heightMeasureSpec);

    this.setMeasuredDimension(parentWidth, parentHeight);
}

ビューが画面よりも小さい場合、これは正常に機能するようです。ただし、カスタムビューが画面よりも大きい場合があり、画面サイズを小さくすることを計画しているため、カスタムビューをラップでラップしましたScrollViewが、現在はparentHeight0onMeasureとして出力されます。

スクロール機能を簡単に継承できることを期待しViewて、カスタムビューのスーパークラスをからに変更しましたが、これは行われていなかったため、機能をカスタムで機能させる方法を探す必要があります。自分のスクロール機能を表示または作成します。 ScrollViewScrollView

誰かアドバイスはありますか?低レベルのタッチイベントを使用した大きな画像のスクロールに関するこの投稿を見たことがあります。自分で作成する必要がある場合は、その機能の一部をコピーする予定でしたが、どちらの方法でも正しい方向に微調整していただければ幸いです。

4

1 に答える 1

1

答えは簡単だったことがわかりました。そのままにScrollViewして、onMeasureを変更しました。それについて注意することは、Androidは幅を提供しますが、高さは提供しないということです。これは最初は混乱していました。使用可能なスペースを埋めるためにビューを取得するために、親ビューの表示されている長方形を取得しました。完全なコード(うまくいけば、同じ問題を抱えている他の誰かを助けるでしょう):

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);

    int parentWidth = MeasureSpec.getSize(widthMeasureSpec);
    int parentHeight;

    if(isLandscape()) {
        Rect r = new Rect();
        ((ScrollView)getParent()).getGlobalVisibleRect(r);
        parentHeight = r.bottom - r.top;
    } else {
        parentHeight = (int) Util.getViewHeight();
    }

    this.setMeasuredDimension(parentWidth, parentHeight);
}
于 2011-07-20T18:07:27.087 に答える