解决Android跑马灯不动问题
布局配置
首先来看一下请的布局吧:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/LayoutFFStyle"
android:orientation="vertical"
android:background="#F6F4EE">
<RelativeLayout
style="@style/LayoutFWStyle"
android:layout_gravity="center_vertical"
android:gravity="center_vertical"
android:background="#EEEEEE"
android:paddingTop="5dip"
android:paddingBottom="5dip">
<LinearLayout
style="@style/LayoutWFStyle"
android:orientation="horizontal"
android:layout_alignParentLeft="true"
android:layout_margin="10dip">
<TextView
android:layout_width="100dip"
android:layout_height="wrap_content"
android:textColor="#000000"
android:text="AppBlog.CN APP开发技术博客, AppBlog.CN APP开发技术博客"
android:ellipsize="marquee"
android:focusable="true"
android:marqueeRepeatLimit="marquee_forever"
android:focusableInTouchMode="true"
android:scrollHorizontally="true"
android:textSize="18sp"
android:singleLine="true"
android:layout_marginLeft="5dip"/>
<TextView
android:id="@+id/search_result_list_item_percapita"
style="@style/LayoutWWStyle"
android:textColor="#000000"
android:paddingLeft="5dip"
android:textSize="18sp"
android:gravity="center_vertical"/>
</LinearLayout>
<LinearLayout
style="@style/LayoutWFStyle"
android:orientation="horizontal"
android:layout_margin="10dip"
android:layout_alignParentRight="true">
<TextView
style="@style/LayoutWWStyle"
android:gravity="center_vertical"
android:paddingRight="5dip"
android:text="386m"/>
<ImageView
style="@style/LayoutWWStyle"
android:layout_gravity="center_vertical"
android:src="@drawable/arrow_right_gray"/>
</LinearLayout>
</RelativeLayout>
<Gallery
android:id="@+id/search_result_foot_gallery"
style="@style/LayoutFWStyle"
android:paddingTop="10dip"
android:paddingBottom="10dip"
android:spacing="10dip"
android:scrollbars="none"
android:fadingEdge="none"
android:unselectedAlpha="1"/>
</LinearLayout>
说明一下,这个布局是在ListView中item,在adapter去引用的,跑马灯最后就不滚动。解决方法:
设置焦点
<TextView
android:layout_width="100dip"
android:layout_height="wrap_content"
android:textColor="#000000"
android:text="AppBlog.CN APP开发技术博客, AppBlog.CN APP开发技术博客"
android:ellipsize="marquee"
android:focusable="true"
android:marqueeRepeatLimit="marquee_forever"
android:focusableInTouchMode="true"
android:scrollHorizontally="true"
android:textSize="18sp"
android:singleLine="true"
android:hapticFeedbackEnabled="true"
android:layout_marginLeft="5dip">
<requestFocus/>
</TextView>
这种方法在ListView布局下不太靠谱,如果能够在引用这个布局文件中去设置焦点话应该可以用,但是没有试过。
重写TextView
import android.content.Context;
import android.util.AttributeSet;
import android.widget.TextView;
/**
* 解决跑马灯不动的问题
*/
public class ScrollForeverTextView extends TextView {
public ScrollForeverTextView(Context context) {
super(context);
}
public ScrollForeverTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ScrollForeverTextView(Context context, AttributeSet attrs,
int defStyle) {
super(context, attrs, defStyle);
}
@Override
public boolean isFocused() {
return true;
}
}
<cn.appblog.widget.ScrollForeverTextView
android:layout_width="100dip"
android:layout_height="wrap_content"
android:textColor="#000000"
android:text="AppBlog.CN APP开发技术博客, AppBlog.CN APP开发技术博客"
android:ellipsize="marquee"
android:focusable="true"
android:marqueeRepeatLimit="marquee_forever"
android:focusableInTouchMode="true"
android:scrollHorizontally="true"
android:textSize="18sp"
android:singleLine="true"
android:layout_marginLeft="5dip"/>
自定义控件
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.AttributeSet;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
import com.lianlianpay.common.config.Constants;
import com.lianlianpay.common.utils.android.NLog;
/**
* 单行文本跑马灯控件
*/
public class AutoScrollTextView extends TextView implements OnClickListener {
public final static String TAG = AutoScrollTextView.class.getSimpleName();
private float textLength = 0f;// 文本长度
private float viewWidth = 0f;
private float step = 0f;// 文字的横坐标
private float y = 0f;// 文字的纵坐标
private float temp_view_plus_text_length = 0.0f;// 用于计算的临时变量
private float temp_view_plus_two_text_length = 0.0f;// 用于计算的临时变量
public boolean isStarting = false;// 是否开始滚动
private Paint paint = null;// 绘图样式
private CharSequence text = "";// 文本内容
private float speed = 0.5f;
private int textColor = 0xFF000000;
public int getTextColor() {
return textColor;
}
public void setTextColor(int color) {
this.textColor = color;
}
public float getSpeed() {
return speed;
}
public void setSpeed(float speed) {
this.speed = speed;
}
public AutoScrollTextView(Context context) {
super(context);
initView();
}
public AutoScrollTextView(Context context, AttributeSet attrs) {
super(context, attrs);
initView();
}
public AutoScrollTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initView();
}
/** */
/**
* 初始化控件
*/
private void initView() {
setOnClickListener(this);
}
/**
/**
* 文本初始化,每次更改文本内容或者文本效果等之后都需要重新初始化一下!
*/
public void init(float width/*WindowManager windowManager*/) {
NLog.i(Constants.TAG, "width: " + width);
text = super.getText();
paint = super.getPaint();
// Paint paint = new Paint();
text = getText().toString();
textLength = paint.measureText(text.toString());
// viewWidth = getWidth();
// if (viewWidth == 0) {
// if (windowManager != null) {
// Display display = windowManager.getDefaultDisplay();
// viewWidth = display.getWidth();
// }
// }
viewWidth = width;
step = textLength;
temp_view_plus_text_length = viewWidth + textLength;
temp_view_plus_two_text_length = viewWidth + textLength * 2;
y = getTextSize() + getPaddingTop();
paint.setColor(textColor);
}
@Override
public Parcelable onSaveInstanceState() {
Parcelable superState = super.onSaveInstanceState();
SavedState ss = new SavedState(superState);
ss.step = step;
ss.isStarting = isStarting;
return ss;
}
@Override
public void onRestoreInstanceState(Parcelable state) {
if (!(state instanceof SavedState)) {
super.onRestoreInstanceState(state);
return;
}
SavedState ss = (SavedState) state;
super.onRestoreInstanceState(ss.getSuperState());
step = ss.step;
isStarting = ss.isStarting;
}
public static class SavedState extends BaseSavedState {
public boolean isStarting = false;
public float step = 0.0f;
SavedState(Parcelable superState) {
super(superState);
}
@Override
public void writeToParcel(Parcel out, int flags) {
super.writeToParcel(out, flags);
out.writeBooleanArray(new boolean[]{isStarting});
out.writeFloat(step);
}
public static final Parcelable.Creator<SavedState> CREATOR = new Parcelable.Creator<SavedState>() {
public SavedState[] newArray(int size) {
return new SavedState[size];
}
@Override
public SavedState createFromParcel(Parcel in) {
return new SavedState(in);
}
};
private SavedState(Parcel in) {
super(in);
boolean[] b = null;
in.readBooleanArray(b);
if (b != null && b.length > 0)
isStarting = b[0];
step = in.readFloat();
}
}
/**
* 开始滚动
*/
public void startScroll() {
isStarting = true;
invalidate();
}
/**
* 停止滚动
*/
public void stopScroll() {
isStarting = false;
invalidate();
}
@Override
public void onDraw(Canvas canvas) {
//super.onDraw(canvas);
canvas.drawText(text, 0, text.length(), temp_view_plus_text_length - step, y, paint);
if (!isStarting) {
return;
}
step += speed;
if (step > temp_view_plus_two_text_length)
step = textLength;
invalidate();
}
@Override
public void onClick(View v) {
if (isStarting)
stopScroll();
else
startScroll();
}
}
marquee = (AutoScrollTextView) findViewById(R.id.marquee);
//marquee.setText(String.format(getResources().getString(R.string.marquee0),Consts.termno,"2015-12-28"));
marquee.setText("上证指数3000.15 6.81(0.37%) 深圳成指3000.15 6.81(0.37%)");
//marquee.setTextColor(0xffff0000);//注意:颜色必须在这里设置,xml中设置无效!默认黑色。
//如果想改变跑马灯的文字内容或者文字效果,则在调用完setText方法之后,需要再调用一下init(width)方法,重新进行初始化和相关参数的计算。
marquee.setSpeed(1.5f);
marquee.init(width);//width通常就是屏幕宽!
marquee.startScroll();
版权声明:
作者:Joe.Ye
链接:https://www.appblog.cn/index.php/2023/02/18/android-running-lamp-not-moving-solution/
来源:APP全栈技术分享
文章版权归作者所有,未经允许请勿转载。
THE END
0
二维码
打赏
海报
解决Android跑马灯不动问题
布局配置
首先来看一下请的布局吧:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://sche……
文章目录
关闭
共有 0 条评论