TextView のマーキーの方向を逆にしたい。デフォルトでは、テキストは右から左に移動します。左から右に移動したいです。これどうやってするの?
8 に答える
私はこれを行うための非常にシンプルで簡単な方法を考え出しました。選択に応じて、マーキーエフェクトを両方向に移動させました。だから、ここにトリックがあります:
私はHorizontalScrollView内でTextViewを使用しました。プログラムでスクロールを制御しました。私は以下を使用してテキストの長さを取得しました:
scroll_pos = (int)myTextView.getLayout().getLineWidth(0);
次に、Handlerを使用して、スクロール制限に達するまで再帰的に呼び出しました。このハンドラーで、HorizontalScrollViewを特定の位置にスクロールするようにしました。
Handler hHandler = new Handler()
{
@Override
public void handleMessage(Message msg)
{
hScroll.scrollTo(scroll_pos, 0);
scroll_pos--;
if(scroll_pos >= 0)
hHandler.sendEmptyMessage(0);
}
};
そしてここに、左から右への滑らかなマーキーがあります。乾杯!
別の簡単な方法は HTML を使用することで、簡単に方向を変えることもできますdirection="Left"
<html><body><FONT COLOR="#000000" ><marquee id="mrqSlogan" direction="Left" style="width: auto;" >text your</marquee></FONT></body></html>
そして WebView に渡します
webView.loadDataWithBaseURL(null, yourhtmltext, "text/html" , null, null);
最後に、ここで最良のソリューションを見つけました: https://github.com/Torob/MarqueeView
このライブラリを使用するには:
- この Java ファイル ( MarqueeView.java ) をプロジェクトの Java フォルダーに追加するだけです。
xml レイアウトで、TextView をこの MarqueeView 内に次のように配置します。
<your.packagename.MarqueeView android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/horizontalScrollView" android:scrollbars="none" android:visibility="visible" android:clickable="false"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/test" android:id="@+id/scrollingtext" android:singleLine="true" android:focusable="false" android:focusableInTouchMode="false" android:paddingRight="25dp" android:paddingLeft="25dp" /> </your.packagename.MarqueeView>
この動作で独自のコンポーネントを作成することをお勧めします。
このように:子として単一の TextView を持つ ViewFlipper (テキストが表示されます)。
flipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.marquee_in));
flipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.marquee_out));
マーキーイン:
<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="0%p"
android:toXDelta="-100%p"
android:duration="1500"/>
</set>
マーキーアウト:
<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="100%p"
android:toXDelta="0%p"
android:duration="1500"/>
</set>
「ネイティブ」アニメーションのように見せるには、デュレーションを少し調整する必要があります。:-)
お探しの機能は、現時点ではご利用いただけないようです。
TextView.java のソースから独自のリバース マーキー テキストビューを作成できますが、その中に「マーキー」への参照がかなりあります。50以上数えたので、スクロール方向を逆にするのに時間がかかるかもしれません。
一部の双方向言語サポートにより、テキストビューをだまして左から右にスクロールできるようになる可能性があると思いましたが、Android は RTL 言語をうまくサポートしていないようです。
今のところ、唯一のオプションは、マーキーの方向性を受け入れるか、機能をサポートする独自の TextView クラスを作成することです。
このセクションの 3810 ~ 3815 行を見てみましょう。
if (mMarquee != null && mMarquee.isRunning()) {
canvas.translate(-mMarquee.mScroll, 0.0f);
}
mMarquee が次のようになる前にマイナス記号を削除します。
if (mMarquee != null && mMarquee.isRunning()) {
canvas.translate(mMarquee.mScroll, 0.0f);
}
明らかに、追加の変更を加える必要がありますが、これは正しい方向を示します (文字通り)。
これが解決策です:
これをレイアウトファイルに設定します:
<TextView
android:id="@+id/textId"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="#337700"
android:textSize="20px"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:singleLine="true"
android:textStyle="bold"
android:text="Download Form for Different Vehiecle Purposes ....!!!">
</TextView>
そしてこれをアクティビティに設定します:
tv = (TextView) findViewById(R.id.textId);
tv.setSelected(true);
私の場合、これはテキストを右から左に移動しています。
すべての人が使用する右から左へのテキストの場合:これを試してください:
TextView tv = (TextView) findViewById(R.id.txt);
Rect bounds = new Rect();
Paint textPaint = tv.getPaint();
String text = tv.getText().toString();
textPaint.getTextBounds(text, 0, text.length(), bounds);
int width = bounds.width();
LinearLayout.LayoutParams lp = (LayoutParams) tv.getLayoutParams();
lp.width = width + 100;
int startX = 300;
TranslateAnimation ta = new TranslateAnimation(startX, lp.width, 0, 0);
ta.setDuration(20000);
ta.setRepeatCount(-1);
tv.setAnimation(ta);