L遷客

          技術博客
          隨筆 - 1, 文章 - 12, 評論 - 1, 引用 - 0
          數據加載中……

          自定義TextView跑馬燈效果,可控制啟動,停止,和速度

          自定義TextView跑馬燈效果,可控制啟動,停止,和速度

          Android自帶的跑馬燈效果不太好控制,不能控制速度,不能即時停止和啟動,而且還受焦點的影響蛋疼不已。由于項目需求需要用的可控制性高的跑馬燈效果,所以自己寫了一個自定義的TextView

          ---------------------------------------------------------------------------------------------------------------------

          注意:在布局文件引用本view,paddingLeft,paddingRigh都必須為0dp,需要增加這兩個屬性的,大家可以自行修改代碼。

              android:ellipsize="marquee" android:singleLine="true" 這兩個屬性也要加上

          ---------------------------------------------------------------------------------------------------------------------

          public class MarqueeText extends  TextView  implements  Runnable {

                  private int currentScrollX;// 當前滾動的位置

                  private boolean isStop = false;

                  private int textWidth;

                  private boolean isMeasure = false;

           

                  public MarqueeText(Context context) {

                          super(context);

                          // TODO Auto-generated constructor stub

                  }

                  public MarqueeText(Context context, AttributeSet attrs) {

                          super(context, attrs);

                  }

                  public MarqueeText(Context context, AttributeSet attrs, int defStyle) {

                          super(context, attrs, defStyle);

                  }

                  @Override

                  protected void onDraw(Canvas canvas) {

                          // TODO Auto-generated method stub

                          super.onDraw(canvas);

                          if (!isMeasure) {// 文字寬度只需獲取一次就可以了

                                  getTextWidth();

                                  isMeasure = true;

                          }

                  }

          // 獲取文字寬度

                  private void getTextWidth() {

                          Paint paint = this.getPaint();

                          String str = this.getText().toString();

                          textWidth = (int) paint.measureText(str);

                  }

                  @Override

                  public void run() {

                          currentScrollX -= 2;// 滾動速度

                          scrollTo(currentScrollX, 0);

                          if (isStop) {

                                  return;

                          }

                          if (getScrollX() <= -(this.getWidth())) {

                                  scrollTo(textWidth, 0);

                                  currentScrollX = textWidth;

          //return;

                         }

                          postDelayed(this, 5);

                  }

                  // 開始滾動

                  public void startScroll() {

                          isStop = false;

                          this.removeCallbacks(this);

                          post(this);

                  }

                  // 停止滾動

                  public void stopScroll() {

                          isStop = true;

                  }

                  // 從頭開始滾動

                  public void startFor0() {

                      currentScrollX = 0;

                      startScroll();

                  }

          }

          ---------------------------------------------------------------------------------------------------------------------

          布局文件:

          ---------------------------------------------------------------------------------------------------------------------

          <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

              xmlns:tools="http://schemas.android.com/tools"

              android:layout_width="fill_parent"

              android:layout_height="fill_parent"

              android:orientation="vertical" >

              <Button

                  android:id="@+id/start"

                  android:layout_width="wrap_content"

                  android:layout_height="wrap_content"

                  android:onClick="start"

                  android:text="走起" />

              <Button

                  android:id="@+id/stop"

                  android:layout_width="wrap_content"

                  android:layout_height="wrap_content"

                  android:onClick="stop"

                  android:text="停止" />

              <Button

                  android:id="@+id/startfor0"

                  android:layout_width="wrap_content"

                  android:layout_height="wrap_content"

                  android:onClick="startFor0"

                  android:text="從頭開始" />

              <simtice.demo.marqueetext.MarqueeText

                  android:id="@+id/test"

                  android:layout_width="fill_parent"

                  android:layout_height="wrap_content"

                  android:background="#339320"

                  android:ellipsize="marquee"

                  android:singleLine="true"

                  android:text="這才是真正的文字跑馬燈效果"

                  android:textColor="#000000"

                  android:textSize="20dp" >

              </simtice.demo.marqueetext.MarqueeText>

           

          </LinearLayout>

           

          ---------------------------------------------------------------------------------------------------------------------

          MainActivity

          ---------------------------------------------------------------------------------------------------------------------

          public class MainActivity extends Activity {

                  private MarqueeText test;

                  @Override

                  public void onCreate(Bundle savedInstanceState) {

                          super.onCreate(savedInstanceState);

                          setContentView(R.layout.activity_main);

                          test = (MarqueeText) this.findViewById(R.id.test);

                  }

                  public void start(View v) {

                          test.startScroll();

                  }

                  public void stop(View v) {

                          test.stopScroll();

                  }

                  public void startFor0(View v){

                          test.startFor0();

                  }

          }

          posted on 2013-02-24 16:44 L遷客 閱讀(83) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 昌江| 永仁县| 赞皇县| 海伦市| 集贤县| 昌都县| 义乌市| 渝中区| 滨海县| 宜章县| 延边| 博客| 桐庐县| 集安市| 凤阳县| 巴林左旗| 丹江口市| 新蔡县| 平江县| 虎林市| 青河县| 两当县| 乌鲁木齐市| 南康市| 凤山市| 金沙县| 乐业县| 丰城市| 南华县| 德化县| 岳池县| 宜黄县| 罗江县| 密云县| 来安县| 溆浦县| 湾仔区| 白银市| 阜新市| 高安市| 象山县|