2013-05-04 13 views
5

Ich habe versucht, den Laufschrift-Effekt für das Wort Hello in meiner Anwendung zu geben, aber Android erlaubt nicht das gleiche, es sei denn, die Länge des Textes überschreitet die Bildschirmgröße. Gibt es eine Lösung dafür?Wie erstellt man einen Laufschrift-Effekt für einen Text kleinerer Länge, der die Bildschirmgröße in Android nicht überschreitet?

PS: So einfach das scheint, ich habe noch keine Lösung gefunden.

+0

Gut darauf hinweisen. –

+0

Danke @RobiKumarTomar. –

Antwort

11

Ich verwendete einfaches leichtes Gewicht von Ticker wie Animation, die ich in meinen frühen Android-Tagen entwickelt habe.

unten ist der vollständige Code.

Hoffe, das hilft.

Works für alle API-Ebenen von Android

import android.os.Bundle; 
import android.app.Activity; 
import android.content.Context; 
import android.graphics.Color; 
import android.view.Menu; 
import android.view.View; 
import android.view.animation.Animation; 
import android.view.animation.TranslateAnimation; 
import android.widget.LinearLayout; 
import android.widget.TextView; 

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     setticker("Hello", this); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 


    public void setticker(String text, Context contx) { 
     if (text != "") { 
      LinearLayout parent_layout = (LinearLayout) ((Activity) contx) 
        .findViewById(R.id.ticker_area); 

      TextView view = new TextView(contx); 
      view.setText(text); 

      view.setTextColor(Color.BLACK); 
      view.setTextSize(25.0F); 
      Context context = view.getContext(); // gets the context of the view 

      // measures the unconstrained size of the view 
      // before it is drawn in the layout 
      view.measure(View.MeasureSpec.UNSPECIFIED, 
        View.MeasureSpec.UNSPECIFIED); 

      // takes the unconstrained width of the view 
      float width = view.getMeasuredWidth(); 
      float height = view.getMeasuredHeight(); 

      // gets the screen width 
      float screenWidth = ((Activity) context).getWindowManager() 
        .getDefaultDisplay().getWidth(); 

      view.setLayoutParams(new LinearLayout.LayoutParams((int) width, 
        (int) height, 1f)); 

      System.out.println("width and screenwidth are" + width + "/" 
        + screenWidth + "///" + view.getMeasuredWidth()); 

      // performs the calculation 
      float toXDelta = width - (screenWidth - 0); 

      // sets toXDelta to -300 if the text width is smaller that the 
      // screen size 
      if (toXDelta < 0) { 
       toXDelta = 0 - screenWidth;// -300; 
      } else { 
       toXDelta = 0 - screenWidth - toXDelta;// -300 - toXDelta; 
      } 
      // Animation parameters 
      Animation mAnimation = new TranslateAnimation(screenWidth, 
        toXDelta, 0, 0); 
      mAnimation.setDuration(15000); 
      mAnimation.setRepeatMode(Animation.RESTART); 
      mAnimation.setRepeatCount(Animation.INFINITE); 
      view.setAnimation(mAnimation); 
      parent_layout.addView(view); 
     } 
    } 


} 

in activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <LinearLayout 
     android:id="@+id/ticker_area" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:background="#9CB1DD" 
     android:orientation="horizontal" > 
    </LinearLayout> 
</RelativeLayout> 
+0

Gr8 Arbeit, So +1, –

4

Es gibt eine einfache Lösung

Sie haben eine WebView und Anzeige Marquee wie dieser Code unten zu erstellen.

webView = (WebView)findViewById(R.id.web); 

String summary = "<html><FONT color='#fdb728' FACE='courier'><marquee behavior='scroll' direction='left' scrollamount=10>" 
       + "Hello Droid" + "</marquee></FONT></html>"; 

webView.loadData(summary, "text/html", "utf-8"); 
0

Hier ist der vollständige Code für Ihr Problem:

Main_Activity.java Code:‘

WebView webView; 

webView = (WebView)findViewById(R.id.web); 


String summary = "<html><FONT color='#fdb728' FACE='courier'><marquee behavior='scroll' direction='left' scrollamount=10>" 
     + "Hello Droid" + "</marquee></FONT></html>"; 

webView.loadData(summary, "text/html", "utf-8"); // Set focus to the textview' 

main_activity.xml Code:

<WebView 
 
     android:layout_width="match_parent" 
 
     android:layout_height="wrap_content" 
 
     android:id="@+id/web" 
 
     ></WebView>

0

Um tickr/marquee Animation auf Textansicht (auch für kurze Textlänge), es schafft eine translatorische Animation von extremen Rechten gelten (+ 1f) nach ganz links (-1f) und startet dann die Animation neu.

public void setTickerAnimation(View view) { 
    Animation animation = new TranslateAnimation(
      Animation.RELATIVE_TO_SELF, +1f, 
      Animation.RELATIVE_TO_SELF, -1f, 
      Animation.RELATIVE_TO_SELF, 0f, 
      Animation.RELATIVE_TO_SELF, 0f); 
    animation.setRepeatCount(Animation.INFINITE); 
    animation.setRepeatMode(Animation.RESTART); 
    animation.setInterpolator(new LinearInterpolator()); 
    animation.setDuration(4000); 
    view.startAnimation(animation); 
} 
Verwandte Themen