2013-09-16 3 views
4

Меня не интересует Marquee, потому что в Marquee вы не можете контролировать скорость выделения. Я попытался анимировать текстовое изображение, но родительский вид закрепил текст в конце, несмотря на то, что все родительские макеты и группы просмотра, охватывающие текстовые поля, устанавливаются двумя флагами clipchildren = false, clipToPadding = false.Как оживить текст (очень длинный текст) прокручивается автоматически горизонтально

Я что-то упустил или там лучше работать?

XML-выглядит

<TextView 
     android:id="@+id/textview1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentLeft="true" 
     android:layout_marginBottom="66dp" 
     android:maxLines="1" 
     android:singleLine="true" 
     android:textColor="#585858" 
     android:textSize="32sp" > 
    </TextView> 

и фрагмент кода выглядеть

TextView textView2 = (TextView)findViewById(R.id.textview1);  
textView2.startAnimation((Animation)AnimationUtils.loadAnimation(this, R.anim.translate)); 
+2

, пожалуйста, сообщите мне, ур проблема была решена. Если она решена, пожалуйста, сообщите о процедуре или отправьте код. – sri

ответ

4

Я думаю, что вы можете использовать перевод анимации. Что-то вроде этого

<translate xmlns:android="http://schemas.android.com/apk/res/android" 
    android:duration="5000" 
    android:fromXDelta="100" 
    android:interpolator="@android:anim/linear_interpolator" 
    android:repeatCount="infinite" 
    android:repeatMode="restart" 
    android:toXDelta="-100" /> 

И добавить к вашему TextView как этот

textview.startAnimation((Animation)AnimationUtils.loadAnimation(Context,R.anim.scroll_animation)); 

Надеется, что это может помочь вам.

+2

Я сделал именно это, но родительский вид все еще зажимает текст – Shri

+0

ОК, я думаю, вам пора опубликовать код. Вы могли бы ? – Hein

+0

отредактировал этот код сейчас, его обернуто в Relative Layout – Shri

-1

попробуйте этот код, это поможет вам Shri н HERO

<?xml version="1.0" encoding="utf-8"?> 
<translate> 
    <translate xmlns:android="http://schemas.android.com/apk/res/android" 
    android:duration="5000" 
    android:fromXDelta="1500" 
    android:interpolator="@android:anim/linear_interpolator" 
    android:repeatCount="infinite" 
    android:repeatMode="restart" 
    android:toXDelta="-1250" /> 

</translate> 
-1
<translate> 
<translate xmlns:android="http://schemas.android.com/apk/res/android" 
android:duration="5000" 
android:fromXDelta="1500" 
android:interpolator="@android:anim/linear_interpolator" 
android:repeatCount="infinite" 
android:repeatMode="restart" 
android:toXDelta="-1250" /> 

+0

подумайте над предоставлением пояснения к вашему коду – arghtype

+0

этот код служит для перемещения текста справа налево, как (marque in php) @arghtype – charan28

0

Это то, что работает для меня. Поместите текст в виде прокрутки, а затем выполните TranslateAnimation на дочернем прокрутке, в моем случае это LinearLayout. Я фактически добавляю несколько видов динамически внутри этого линейного макета.

<ScrollView android:id="@+id/textScrollView" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent"> 
    <LinearLayout 
     android:id="@+id/textLayout" 
     android:orientation="vertical" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"> 
    </LinearLayout> 
</ScrollView> 

TranslateAnimation slide = new TranslateAnimation(0, 0, height, -textLayout.getHeight()); 
    slide.setDuration(movementSpeed); 
    slide.setRepeatCount(-1); 
    slide.setRepeatMode(Animation.RESTART); 
    slide.setInterpolator(new LinearInterpolator()); 

textLayout.startAnimation(slide); 

height --> The point start scrolling up (in my case device height (device bottom)) 
movementSpeed --> scrolling speed 
2

Просто добавьте это к вашему TextView

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:ellipsize="marquee" 
    android:textSize="30dp" 
    android:focusable="true" 
    android:focusableInTouchMode="true" 
    android:marqueeRepeatLimit="marquee_forever" 
    android:scrollHorizontally="true" 
    android:singleLine="true" 
    android:text="Your_Text" /> 
2

Здесь был мой SOLUTION

Чтобы сделать длинный текст внутри TextView не нарезанную родительского вида или экран, я сделал две вещи.

Во-первых, давайте TextView внутри scroolview как ниже код

<ScrollView 
    android:layout_width="wrap_content" 
    android:layout_height="50dp" 
    android:layout_centerHorizontal="true"> 
    <TextView 
     android:id="@+id/marquee_text" 
     android:layout_width="wrap_content" 
     android:layout_height="50dp" 
     android:maxLines="1" 
     android:textColor="@android:color/black" 
     android:textSize="30sp"/> 
</ScrollView> 

Тогда я измеряю мой размер текста, то результаты TextView параметров, делая это.

marqueeText.setText("my long text"); 
    Paint textPaint = marqueeText.getPaint(); 
    String text = marqueeText.getText().toString();//get text 
    int width = Math.round(textPaint.measureText(text));//measure the text size 
    ViewGroup.LayoutParams params = marqueeText.getLayoutParams(); 
    params.width = width; 
    marqueeText.setLayoutParams(params); //refine 

    DisplayMetrics displaymetrics = new DisplayMetrics(); 
    getActivity().getWindowManager().getDefaultDisplay().getRealMetrics(displaymetrics); 
    int screenWidth = displaymetrics.widthPixels; 

    //this is optional. do not scroll if text is shorter than screen width 
    //remove this won't effect the scroll 
    if (width <= screenWidth) { 
     //All text can fit in screen. 
     return; 
    } 
    //set the animation 
    TranslateAnimation slide = new TranslateAnimation(0, -width, 0, 0); 
    slide.setDuration(20000); 
    slide.setRepeatCount(Animation.INFINITE); 
    slide.setRepeatMode(Animation.RESTART); 
    slide.setInterpolator(new LinearInterpolator()); 
    marqueeText.startAnimation(slide); 

Я надеюсь, что это решение, которое заняло у меня полдня для исследования, может помочь другим, которые могут встретить ту же проблему, что и я.

+1

Это сработало для меня! –

+0

Это не работает для меня, текстовый слайд и анимированный, но с вырезом текста, может кто-нибудь помочь ?! –

+0

@AmalKronz Попробуйте отладить вашу ширину, используемую marqueeText, если текст был вырезан. Кроме того, вы можете использовать представление иерархии инструментов для просмотра ваших элементов, чтобы убедиться, что другие представления не перекрывают marqueeText. Удачи –

0

Я на 100% уверен, что это определенно решит проблему большой аудитории здесь.

Q: Автоматическое прокручивание текстового сообщения с одной строкой длиной (либо с использованием hard_coding, либо из string.xml) горизонтально & бесконечно с разумной скоростью, но с использованием шага (попробуйте хотя бы один раз).Нет clliping

Шаг 1: В activity_main.xml файле:

<TextView 
    android:text="either hard coding or from string.xml" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/textView2" 
    android:background="@color/colorPrimary" 
    android:textSize="18sp" 
    android:marqueeRepeatLimit="marquee_forever" 
    android:textColor="@android:color/background_light" /> 

Шаг 2: В main_activity Java файл общественного класса MainActivity продляет AppCompatActivity {

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    TextView textView = (TextView) findViewById(R.id.textView2); 
    textView.setEllipsize(TextUtils.TruncateAt.MARQUEE); 
    textView.setSelected(true); 
    textView.setSingleLine(true); 
    textView.setText("Oxfam says 8 men as rich as half the world. | Govt may set threshold for probe into deposits. | At least 32 dead after Turkish plane hits village.");}} 

// можно удалить последнюю строку, если он уже подал длинный ввод

Смежные вопросы