##現状
HorizontalScrollViewを使って右から左にスクロールするアプリを作ってます。
TextViewに文字を入力してその度に幅をぴったり合わせ、画面幅を超えたら右から左にスクロールします。
TextViewの幅に合わせての可変、画面幅を超えたらスクロールというところは出来ていますが、左端が基準になって右にスクロールしてしまいます。
実現したいのは画面幅を超えたら右端を基準にして左にスクロールするという動きです。
そしてAndroid4.0.4の実機では思い通りの動きができているのですが、Android4.4以上(5以降も含む)では上記の問題が発生しています。
##質問
上記の問題を解決する方法をご存じでしたらご教示ください。
また、4.0.4と4.4以降で違う動きをする原因をご存じの方がいらしたら合わせてご教示いただけるとありがたいです。
##ソースコード
Java
1 private void scrollSet() { 2 resultScroll = (HorizontalScrollView) findViewById(R.id.resultScroll); 3 resultLayout = (LinearLayout) findViewById(R.id.resultLayout); 4 resultText = (TextView) findViewById(R.id.showResult); 5 6 LinearLayout layout = (LinearLayout) findViewById(R.id.mainLayout); 7 8 layout.invalidate(); 9 10 new Thread(new Runnable() { 11 12 @Override 13 public void run() { 14 // TODO 自動生成されたメソッド・スタブ 15 runOnUiThread(new Runnable() { 16 17 @Override 18 public void run() { 19 // TODO 自動生成されたメソッド・スタブ 20 21 scrollWidth = resultScroll.getWidth(); 22 scrollPositionLeft = resultScroll.getLeft(); 23 scrollPositionTop = resultScroll.getTop(); 24 layoutWidth = resultLayout.getWidth(); 25 layoutPositionLeft = resultLayout.getLeft(); 26 layoutPositionTop = resultLayout.getTop(); 27 textWidth = resultText.getWidth(); 28 textPositionLeft = resultText.getLeft(); 29 textPositionTop = resultText.getTop(); 30 31 if (layoutPositionLeft < 0 || scrollWidth < layoutWidth) { 32 resultScroll.scrollTo(-layoutPositionLeft, 0); 33 resultLayout.setTranslationX(-layoutPositionLeft); 34 } 35 36 scrollWidth = resultScroll.getWidth(); 37 scrollPositionLeft = resultScroll.getLeft(); 38 scrollPositionTop = resultScroll.getTop(); 39 layoutWidth = resultLayout.getWidth(); 40 layoutPositionLeft = resultLayout.getLeft(); 41 layoutPositionTop = resultLayout.getTop(); 42 textWidth = resultText.getWidth(); 43 textPositionLeft = resultText.getLeft(); 44 textPositionTop = resultText.getTop(); 45 46 } 47 }); 48 } 49 }).start(); 50 }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/10/09 07:34