Я пытаюсь дать эффект выделения для слова HELLO в моем приложении, но андроид не разрешает его, если длина текста не превышает размер экрана. Есть ли решение вокруг него?
PS: Проще, как кажется, я еще не получил ни одного решения.
Я пытаюсь дать эффект выделения для слова HELLO в моем приложении, но андроид не разрешает его, если длина текста не превышает размер экрана. Есть ли решение вокруг него?
PS: Проще, как кажется, я еще не получил ни одного решения.
Я использовал простой легкий тикер, подобный анимации, который я разработал в ранние дни Android.
ниже - полный код.
Надеюсь, что это поможет.
Работает для всех уровней API 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);
}
}
}
в 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>
Существует простое решение
Вам нужно создать 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");
Попробуйте использовать Tickerview из Git Hub.
Вот полный код для вашей проблемы:
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'
main_activity.xml код:
<WebView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/web"
></WebView>
Чтобы применить анимацию tickr/marquee в текстовом представлении (даже для короткой длины текста) он создает трансляционную анимацию от крайнего правого (+ 1f) до крайнего левого (-1f), а затем перезапускает анимацию.
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);
}