Android開發之TextView文字水平滾動效果實現
在網路上搜集了很多關於這方面的文章和實現方法,最終經過實踐驗證和部分調整,完全可用,包括不依賴焦點和選中TextView便可實現水平滾動效果。
第二步:編寫佈局檔案main.xml
第三步:編寫SYIT_Index.java繼承自Activity類
現將主要程式碼羅列如下,希望對看到的人有幫助。
第一步:編寫MarqueeText.java類,繼承自TextView
package cn.superyouth.www.itools;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Canvas;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.widget.TextView;
public class MarqueeText extends TextView {
/** 是否停止滾動 */
private boolean mStopMarquee;
private String mText;
private float mCoordinateX;
private float mTextWidth;
public MarqueeText(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void setText(String text) {
this.mText = text;
mTextWidth = getPaint().measureText(mText);
if (mHandler.hasMessages(0))
mHandler.removeMessages(0);
mHandler.sendEmptyMessageDelayed(0, 2000);
}
@SuppressLint("NewApi")
@Override
protected void onAttachedToWindow() {
mStopMarquee = false;
if (!(mText == null || mText.isEmpty()))
mHandler.sendEmptyMessageDelayed(0, 2000);
super.onAttachedToWindow();
}
@Override
protected void onDetachedFromWindow() {
mStopMarquee = true;
if (mHandler.hasMessages(0))
mHandler.removeMessages(0);
super.onDetachedFromWindow();
}
@SuppressLint("NewApi")
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (!(mText == null || mText.isEmpty()))
canvas.drawText(mText, mCoordinateX, 30, getPaint());
}
@SuppressLint("HandlerLeak")
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 0:
if (Math.abs(mCoordinateX) > (mTextWidth + 5)) {
mCoordinateX = 0;
invalidate();
if (!mStopMarquee) {
sendEmptyMessageDelayed(0,500);
}
} else {
mCoordinateX -= 1;
invalidate();
if (!mStopMarquee) {
sendEmptyMessageDelayed(0, 30);
}
}
break;
}
super.handleMessage(msg);
}
};
}
第二步:編寫佈局檔案main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/backsmall"
android:orientation="vertical" >
<cn.superyouth.www.itools.MarqueeText
android:id="@+id/textMsg"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="115dp"
android:textColor="@android:color/black"
android:lines="1"
android:focusable="true"
android:focusableInTouchMode="true"
android:scrollHorizontally="true"
android:marqueeRepeatLimit="marquee_forever"
android:ellipsize="marquee"
/>
</LinearLayout>
第三步:編寫SYIT_Index.java繼承自Activity類
package cn.superyouth.www;
import java.io.IOException;
import cn.superyouth.www.itools.MarqueeText;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.graphics.Color;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.method.ScrollingMovementMethod;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
public class SYIT_Index extends Activity {
MarqueeText autoScrollTextView;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
autoScrollTextView = (MarqueeText) findViewById(R.id.textMsg);
autoScrollTextView.setTextSize(30);
autoScrollTextView.setTextColor(Color.BLUE);
autoScrollTextView.setText("暫無任何預警資訊!");
// 點選預警提示資訊
autoScrollTextView.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
// 進入預警資訊頁面
Intent intent = new Intent(SYIT_Index.this, SYIT_Warning.class);
startActivity(intent);
}
});
}
}
相關文章
- Android 設定TextView滑動滾動條和滑動效果AndroidTextView
- 一個有上下滾動效果的TextViewTextView
- TextView跑馬燈效果,也就是,自動滾動文字的效果。TextView
- Android開發之DrawerLayout實現抽屜效果Android
- android 讓 TextView 自帶滾動條AndroidTextView
- 教你如何實現 Android TextView 文字輪播效果AndroidTextView
- 前端實現文字滾動效果前端
- css3實現滑鼠懸浮文字水平晃動效果CSSS3
- 直播軟體搭建,Android實現文字滾動播放效果Android
- android TextView裡邊實現圖文混配效果AndroidTextView
- css實現視差滾動效果CSS
- 巢狀滾動效果實現討論巢狀
- Delphi中TFlowPanel實現滾動條效果
- Android 實現GridView的橫向滾動,實現仿京東秒殺效果AndroidView
- 公告文字水平滾動例項程式碼
- javascript文字水平滾動程式碼例項JavaScript
- 微信小程式功能之全屏滾動效果的實現程式碼微信小程式
- 使用純 CSS 實現滾動陰影效果CSS
- js實現的模擬滾動條效果JS
- 使用UICollectionView實現首頁的滾動效果UIView
- 影像平滑滾動效果的VC實現 (轉)
- [Parallax Animation]實現知乎 Android 客戶端啟動頁視差滾動效果Android客戶端
- 滑鼠雙擊頁面實現自動滾動效果
- 實現隨著滾動條滾動,導航會自動切換的效果
- Android開發中陰影效果的實現Android
- 實現報表滾動到底部翻頁效果
- H5頁面滾動阻尼效果實現H5
- JavaFx 實現水平滾動文字(跑馬燈效果)Java
- css3實現的立體滾動效果CSSS3
- js滑鼠移動實現圖片立體滾動效果JS
- 拖動滾動條實現側欄導航定位效果
- 拖動滾動條實現內容自動載入效果
- 報表中怎樣實現滾動的公告效果
- unity 實現輪盤方式的按鈕滾動效果Unity
- css3實現的滾動的檯球效果CSSS3
- iOS 開發之模糊效果的五種實現iOS
- OverScroll彈性滾動和慣性滾動效果的實現原理——CoordinatorLayout+Behavior
- 類似微信首頁彈性滾動和慣性滾動效果的實現——OverScroll