欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android實現(xiàn)跑馬燈效果的代碼詳解

 更新時間:2024年04月30日 09:22:27   作者:夏沫瑯琊  
Android中實現(xiàn)跑馬燈效果有多種方式,本文給大家介紹了Android實現(xiàn)跑馬燈效果的簡單示例,對大家的學(xué)習(xí)或工作有一定的幫助,感興趣的朋友可以參考下

Android 實現(xiàn)跑馬燈效果

Android中實現(xiàn)跑馬燈效果有多種方式,本篇簡單介紹下:

1: TextView屬性實現(xiàn)

    <TextView
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:background="#77000000"
        android:padding="5dp"
        android:singleLine="true"
        android:ellipsize="marquee"
        android:scrollHorizontally="true"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:marqueeRepeatLimit="marquee_forever"
        android:text="這是textview的跑馬燈效果"
        android:id="@+id/tv1"
        />

這里需要注意下:

  • 需要限制textview的寬度,不能設(shè)置為wrap_content
  • 啟動跑馬燈效果需要獲取焦點requestFocus().

2: 代碼實現(xiàn)

//設(shè)置TextView只顯示一行文本。
tv2.setSingleLine();
//設(shè)置TextView的文本內(nèi)容是否可以水平滾動。
tv2.setHorizontallyScrolling(true);
//設(shè)置當TextView的文本內(nèi)容超出可顯示范圍時的省略方式,這里設(shè)置為跑馬燈效果。
tv2.setEllipsize(TextUtils.TruncateAt.MARQUEE);
//設(shè)置跑馬燈效果重復(fù)的次數(shù),-1表示無限重復(fù)。
tv2.setMarqueeRepeatLimit(-1);
//設(shè)置TextView是否可以獲取焦點。
tv2.setFocusable(true);
//設(shè)置TextView在觸摸模式下是否可以獲取焦點。
tv2.setFocusableInTouchMode(true);
//請求獲取焦點。
tv2.requestFocus();

3: 自定義 view實現(xiàn)

這里可以使用動畫的效果實現(xiàn).

package com.test.marquee;

import android.animation.ValueAnimator;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;
import android.view.animation.LinearInterpolator;

import androidx.annotation.Nullable;

public class MarqueeView extends View {
private String text;
private Paint paint;
private float textWidth;
private float textX;
private float viewWidth;
private ValueAnimator animator;

public MarqueeView(Context context) {
super(context);
init();
}

public MarqueeView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init();
}

public MarqueeView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}

private void init() {
text = “This is a marquee”;
paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setTextSize(50);
paint.setColor(Color.BLACK);
textWidth = paint.measureText(text);
}

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
viewWidth = w;
textX = viewWidth;
}

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawText(text, textX, getHeight() / 2, paint);
}

public void startMarquee() {
animator= ValueAnimator.ofFloat(viewWidth, -textWidth);
animator.setDuration(5000);
animator.setInterpolator(new LinearInterpolator());
animator.setRepeatCount(ValueAnimator.INFINITE);
animator.addUpdateListener(animation -> {
textX = (float) animation.getAnimatedValue();
invalidate();
});
animator.start();
}

public void stopMarquee() {
// 停止動畫
if (animator!=null) animator.cancel();
}
}

4: 實現(xiàn)豎直效果的跑馬燈

package com.test.marquee;

import android.content.Context;
import android.graphics.Canvas;
import android.text.TextUtils;
import android.text.method.ScrollingMovementMethod;
import android.util.AttributeSet;

import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatTextView;

public class VerticalMarqueeTextView extends AppCompatTextView {
private float offsetY;

public VerticalMarqueeTextView(Context context) {
super(context);
init();
}

public VerticalMarqueeTextView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init();
}

private void init() {
setSingleLine();
setEllipsize(TextUtils.TruncateAt.MARQUEE);
setMarqueeRepeatLimit(-1);
setFocusable(true);
setFocusableInTouchMode(true);
setHorizontallyScrolling(true);
setMovementMethod(ScrollingMovementMethod.getInstance());
}

@Override
protected void onDraw(Canvas canvas) {
canvas.translate(0, offsetY);
super.onDraw(canvas);
}

@Override
public boolean isFocused() {
return true;
}

@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
post(new Runnable() {
@Override
public void run() {
offsetY -= 1;
if (offsetY <= -getHeight()) {
offsetY = 0;
}
invalidate();
postDelayed(this, 20);
}
});
}
}

以上就是Android實現(xiàn)跑馬燈效果的代碼詳解的詳細內(nèi)容,更多關(guān)于Android跑馬燈的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論