2011-07-20 12 views
2

どの画面サイズでも表示可能なカスタムビューを作成しました。Androidカスタムビューでスクロールを実装する方法

私は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にカスタムビューを巻いたが、今onMeasureparentHeightは0です。私は「

として出てきますスクロール機能を継承するために、カスタムビューのスーパークラスをScrollViewからScrollViewに変更しましたが、これは発生していないので、私はScrollView機能を入手する方法を見つけようとしました。カスタム表示、または自分のスクロール機能を書くことができます。

誰にでもアドバイスがありますか?私はthis post on Large Image Scrolling Using Low Level Touch Eventsを見て、私が自分自身を書くことを余儀なくされるなら、その機能のいくつかをコピーしようとしていましたが、正しい方向にどちらかの方法で軽く感謝するでしょう。

+0

親の 'ScrollView'にはどのようなレイアウトプロパティが設定されていますか? – rds

答えて

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); 
} 
関連する問題