2013-05-04 19 views

Odpowiedz

11

Użyłem prostej lekkości animacji, którą opracowałem we wczesnych czasach Androida.

Poniżej znajduje się pełny kod.

Mam nadzieję, że to pomoże.

działa dla wszystkich poziomów API Androida

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


} 

w 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 praca, więc +1, –

4

Jest to proste rozwiązanie

Trzeba stworzyć WebView i wyświetlaną ramkę jak tego kodu poniżej.

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

Oto pełny kod dla swojego problemu:

Kodeksu Main_Activity.java:”

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' 
Kod

main_activity.xml:

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

0

Aby zastosować tickr/marquee animację na widoku tekstu (nawet na krótkiej długości tekstu), tworzy animację postępowym od skrajnej prawicy (+ 1f) do skrajnej lewej (-1f), a następnie ponownie uruchamia animację.

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