1

私はHorizo​​ntalScrollViewの内部に(水平方向の)LinearLayoutを持っています。ユーザーがLinearLayoutの要素をクリックすると、選択された要素がScrollViewの左側と同じになるように常にスクロールします。子供にパディングを追加した後、Horizo​​ntalScrollViewを正しい位置にスクロールさせるにはどうすればよいですか?

は今のところ、私のOnClickListenerに次のコードは、通常、私が欲しいものを実現:

ReadView readView = (ReadView) view; 
horizontalScrollView.smoothScrollTo(readView.getLeft(), 0); 

要素が理にかなってLinearLayout、の終わり近くにある場合を除いて。これを解決するために、LinearLayoutの右側にパディングを追加します。

ReadView readView = (ReadView) view; 
horizontalLayout.setPadding(0,0, 1000, 0); 
horizontalScrollView.smoothScrollTo(readView.getLeft(), 0); 

例外はありません。動作しません。私は、パディングが正しく追加されていることを確認しましたが、スクロールビューはパディングに基づいてスクロールしていません。

後でパッディングを削除したいので、ユーザーがクリックせずにスクロールしたときに余分なパディングが表示されないようにするため、OnClickListenerでこれを行うことができます。

答えて

0

ソリューションが見つかりました:ViewTreeObserverを使用してください。

ViewTreeObserver vto = horizontalLayout.getViewTreeObserver(); 

vto.addOnDrawListener(new ViewTreeObserver.OnDrawListener() { 
       @Override 
       public void onDraw() { 
        vto.removeOnDrawListener(this); 
        horizontalScrollView.smoothScrollTo(readView.getLeft(), 0); 
        /* ... */ 
       } 
      }); 
      horizontalLayout.setPadding(0,0, 1000, 0); 
関連する問題