12

TextView のマーキーの方向を逆にしたい。デフォルトでは、テキストは右から左に移動します。左から右に移動したいです。これどうやってするの?

4

8 に答える 8

10

私はこれを行うための非常にシンプルで簡単な方法を考え出しました。選択に応じて、マーキーエフェクトを両方向に移動させました。だから、ここにトリックがあります:

私はHorizo​​ntalScrollView内でTextViewを使用しました。プログラムでスクロールを制御しました。私は以下を使用してテキストの長さを取得しました:

scroll_pos = (int)myTextView.getLayout().getLineWidth(0);

次に、Handlerを使用して、スクロール制限に達するまで再帰的に呼び出しました。このハンドラーで、Horizo​​ntalScrollViewを特定の位置にスクロールするようにしました。

Handler hHandler = new Handler()
{
    @Override
    public void handleMessage(Message msg)
    {
        hScroll.scrollTo(scroll_pos, 0);
        scroll_pos--;
        if(scroll_pos >= 0)
            hHandler.sendEmptyMessage(0);
    }       
};

そしてここに、左から右への滑らかなマーキーがあります。乾杯!

于 2011-08-22T09:23:25.447 に答える
8

別の簡単な方法は 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);
于 2012-10-04T12:29:18.243 に答える
6

最後に、ここで最良のソリューションを見つけました: https://github.com/Torob/MarqueeView

このライブラリを使用するには:

  1. この Java ファイル ( MarqueeView.java ) をプロジェクトの Java フォルダーに追加するだけです。
  2. 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>
    
于 2016-02-28T10:44:27.823 に答える
1

この動作で独自のコンポーネントを作成することをお勧めします。

このように:子として単一の 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>

「ネイティブ」アニメーションのように見せるには、デュレーションを少し調整する必要があります。:-)

于 2011-08-08T00:21:03.417 に答える
1

お探しの機能は、現時点ではご利用いただけないようです。

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);
    }

明らかに、追加の変更を加える必要がありますが、これは正しい方向を示します (文字通り)。

于 2011-07-19T12:10:01.020 に答える
0

これが解決策です:

これをレイアウトファイルに設定します:

<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);

私の場合、これはテキストを右から左に移動しています。

于 2011-07-15T10:33:38.923 に答える
0

すべての人が使用する右から左へのテキストの場合:これを試してください:

        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);
于 2013-10-10T06:34:55.847 に答える