textedit studio example and android android-layout text marquee

studio - textview and button android example



¿Cómo crear un efecto de marquesina para un texto de menor longitud que no exceda el tamaño de pantalla en Android? (5)

He intentado dar el efecto de marquesina para la palabra HOLA en mi aplicación, pero Android no permite lo mismo a menos que la longitud del texto exceda el tamaño de la pantalla. ¿Hay una solución a su alrededor?

PD: Por simple que parezca, todavía no tengo en mis manos NINGUNA solución.



Utilicé un ligero peso simple de animación tipo teletipo que desarrollé en mis primeros días con Android.

a continuación está el código completo.

Espero que esto ayude.

Funciona para todos los niveles API de 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); } } }

en 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>


Aquí está el código completo para su problema:

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

código main_activity.xml:

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


Existe una solución simple

WebView crear un WebView y mostrar marquesina como este código a continuación.

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


Para aplicar animación tic / marquesina en la vista de texto (incluso para texto corto), crea una animación de traducción desde extrema derecha (+ 1f) a extrema izquierda (-1f) y luego reinicia la animación.

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