編輯:關於Android編程
前言
之前有寫一篇TextView跑馬燈的效果,後來實際項目中有發現新的問題,比如還是無法自動跑,文本超過了顯示區域就截取的問題,今天換了一種思路來實現,更簡單更好用。
正文
代碼實現:
public class MarqueeTextView extends TextView {
/** 是否停止滾動 */
private boolean mStopMarquee;
private String mText;
private float mCoordinateX;
private float mTextWidth;
public MarqueeTextView(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);
}
@Override
protected void onAttachedToWindow() {
mStopMarquee = false;
if (!StringUtils.isEmpty(mText))
mHandler.sendEmptyMessageDelayed(0, 2000);
super.onAttachedToWindow();
}
@Override
protected void onDetachedFromWindow() {
mStopMarquee = true;
if (mHandler.hasMessages(0))
mHandler.removeMessages(0);
super.onDetachedFromWindow();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (!StringUtils.isEmpty(mText))
canvas.drawText(mText, mCoordinateX, 15, getPaint());
}
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 0:
if (Math.abs(mCoordinateX) > (mTextWidth + 100)) {
mCoordinateX = 0;
invalidate();
if (!mStopMarquee) {
sendEmptyMessageDelayed(0, 2000);
}
} else {
mCoordinateX -= 1;
invalidate();
if (!mStopMarquee) {
sendEmptyMessageDelayed(0, 30);
}
}
break;
}
super.handleMessage(msg);
}
};
}
代碼說明:
1、2000表示延遲2秒開始跑馬燈效果
2、mTextWidth + 100 表示跑出屏幕100像素再重新開始跑
3、每30毫秒移動1像素
4、原理很簡單,就是定時刷,用法很簡單,直接setText就行,和用系統的一樣,但是不能通過設置xml的值來直接跑,這個可以自己修改。
5、注意onDraw時判定一下text是否為空,這裡StringUtils.isEmpty替換成自己的判定方法即可。
以上就是Android 實現跑馬燈的實例代碼,有需要的朋友可以參考下。
Android Material Design 5.0 PickerDialog
5.0系統下的時間選擇器效果圖: 該項目兼容到3.0以下所以用第三方開源項目:actionbarsherlock,動畫效果兼容:nineoldandroids-
Android學習第五篇——動畫效果
接下來我要介紹的是Android的一些動畫效果一、AlphaAnimation透明動畫這裡我用到了兩種不同的方法來實現透明動畫效果首先布局文件很簡單,就是拖放一個按鈕在界
關於Android藍牙串口通信那點破事
Android藍牙串口通訊 閒著無聊玩起了Android藍牙模塊與單片機藍牙模塊的通信,簡單思路就是要手機通過藍牙發送控制指令給單片機,並作簡單的控制應用。單片機的藍牙
Android通知Notification詳解
Notification的使用大體步驟:1、 獲取狀態通知欄管理2、 實例化通知欄構造器3、 設置NotificationCompat.Builder4、 設置Pendi