編輯:關於android開發
第一種方法(很普遍,很簡單的在xml布局文件中設置TextView的屬性):
<TextView android:id="@+id/tv_text" android:layout_width="match_parent" android:layout_height="wrap_content" android:ellipsize="marquee" android:focusable="true" android:focusableInTouchMode="true" android:marqueeRepeatLimit="marquee_forever" android:singleLine="true" android:textSize="28sp" android:text="路漫漫其修遠兮,吾將上下而求索" android:textColor="#00ff00" android:scrollHorizontally="true"/>
重要代碼:
//設置為跑馬燈顯示
android:ellipsize="marquee"
//獲取焦點
android:focusable="true"
//可以通過toucth來獲得focus
android:focusableInTouchMode="true"
//設置重復的次數
android:marqueeRepeatLimit="marquee_forever"
//單行顯示文字
android:singleLine="true"
2.第二種方法,由於大部分走馬燈文字會在手機屏幕的右側開始,這需要自定義控件來實現了
java代碼:
package com.example.cameratestdemo; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.os.Handler; import android.util.AttributeSet; import android.util.Log; import android.view.View; import android.widget.TextView; /** * 自定義控件循環走馬燈的實現 * * @author cyf 繼承自TextView */ public class Util extends TextView implements Runnable { private static final String TAG = "MarqueeTextView"; // 設置跑馬燈重復的次數,次數 private int circleTimes = 3; //記錄已經重復了多少遍 private int hasCircled = 0; private int currentScrollPos = 0; // 跑馬燈走一遍需要的時間(秒數) private int circleSpeed = 10; // 文字的寬度 private int textWidth = 0; private boolean isMeasured = false; // Handler機制 private Handler handler; private boolean flag = false; // 構造方法 public Util(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub this.removeCallbacks(this); post(this); } /** * 畫筆工具 */ @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); if (!isMeasured) { getTextWidth(); isMeasured = true; } } @Override public void setVisibility(int visibility) { // 二次進入時初始化成員變量 flag = false; isMeasured = false; this.hasCircled = 0; super.setVisibility(visibility); } @Override public void run() { // 起始滾動位置 currentScrollPos += 1; scrollTo(currentScrollPos, 0); // Log.i(TAG, "pos"+currentScrollPos); // 判斷滾動一次 if (currentScrollPos >= textWidth) { // 從屏幕右側開始出現 currentScrollPos = -this.getWidth(); //記錄的滾動次數大設定的次數代表滾動完成,這個控件就可以隱藏了 if (hasCircled >= this.circleTimes) { this.setVisibility(View.GONE); flag = true; } hasCircled += 1; } if (!flag) { // 滾動時間間隔 postDelayed(this, circleSpeed); } } /** * 獲取文本顯示長度 */ private void getTextWidth() { Paint paint = this.getPaint(); String str = this.getText().toString(); Log.i(TAG, str); if (str == null) { textWidth = 0; } textWidth = (int) paint.measureText(str); } /** * 設置滾動次數,達到次數後設置不可見 * * @param circleTimes */ public void setCircleTimes(int circleTimes) { this.circleTimes = circleTimes; } public void setSpeed(int speed) { this.circleSpeed = speed; } public void startScrollShow() { if (this.getVisibility() == View.GONE) this.setVisibility(View.VISIBLE); this.removeCallbacks(this); post(this); } private void stopScroll() { handler.removeCallbacks(this); } }
布局文件中呀使用自定義控件了:
<com.example.cameratestdemo.Util android:id="@+id/tv_text" android:layout_width="match_parent" android:layout_height="wrap_content" android:ellipsize="marquee" android:focusable="true" android:focusableInTouchMode="true" android:marqueeRepeatLimit="marquee_forever" android:scrollHorizontally="true" android:singleLine="true" android:text="路漫漫其修遠兮,吾將上下而求索" android:textColor="#00ff00" android:textSize="28sp" > </com.example.cameratestdemo.Util>
源碼下載:
http://yunpan.cn/c3kL7ILLL7tCt 訪問密碼 bd75
歡迎提出意見,希望可以給大家帶來幫助,謝謝
Android 三級聯動選擇城市+後台服務加載數據庫,技術渣,大家將就著看 首先我們需要一個xml數據保存到數據庫,這裡我從QQ下面找到一個l
Android開發學習之路-EventBus使用,android-eventbusEventBus是一個通過發布、訂閱事件實現組件間消息傳遞的工具。 它存在的目的,就是為
Android高效計算——RenderScript(二),androidrenderscript3 RenderScript運行時層與反射層 3.1 RenderScri
Android 手機衛士--自定義組合控件構件布局結構,android構件由於設置中心條目中的布局都很類似,所以可以考慮使用自定義組合控件來簡化實現 本文地址:http