一:效果图(第一个为跑马灯水平滚动,第二个为上下翻滚)
二:TextView跑马灯实现
1.重写TextView
package pinbidarider.hsrd.com.pinbidarider.utils;
import android.content.Context;
import android.text.TextUtils.TruncateAt;
import android.util.AttributeSet;
/**
* 作者:CaoLiulang
* ❤
* Date:2020/8/7
* ❤
* 模块:跑马灯
*/
public class MarqueeTextView extends android.support.v7.widget.AppCompatTextView {
public MarqueeTextView(Context context) {
super(context);
initView();
}
private void initView() {
setSingleLine();
setEllipsize(TruncateAt.MARQUEE);
}
public MarqueeTextView(Context context, AttributeSet attrs) {
super(context, attrs);
initView();
}
public MarqueeTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initView();
}
@Override
public boolean isFocused() {
return true;
}
}
2.xml布局引用
<pinbidarider.hsrd.com.pinbidarider.utils.MarqueeTextView
android:id="@+id/notice_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginTop="@dimen/dp_10"
android:drawableLeft="@mipmap/advance_message"
android:drawablePadding="5dp"
android:padding="5dp"
android:text="升级黄金骑士可以获取更多佣金哦"
android:textColor="@color/textColorBold"
android:textSize="11dp" />
3.activity引用
//实例化
@BindView(R.id.notice_tv)
TextView notice_tv;
//获取到数据并赋值
notice_tv.setText("给后台的佛挡杀佛科斯伍德PK抛开个人PK发送到联发让土豆发发干啥都科苏东坡PK个骗人");
//跑马灯效果必须加,防止跑马灯停止
notice_tv.setFocusable(true);
notice_tv.setFocusableInTouchMode(true);
notice_tv.setEllipsize(TextUtils.TruncateAt.MARQUEE);
notice_tv.setMarqueeRepeatLimit(-1);
notice_tv.setSingleLine();
notice_tv.setSelected(true);
三:ViewFlipper上下翻滚实现
1.主界面xml引入ViewFlipper
<LinearLayout
android:layout_width="match_parent"
android:layout_height="20dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:src="@mipmap/advance_message" />
<ViewFlipper
android:id="@+id/vf_notice_scroll"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginRight="15dp" />
</LinearLayout>
</LinearLayout>
2.item的xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_notice_item_itle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_weight="1"
android:text="标题"
android:textColor="#9B6916"
android:textSize="12dp"/>
<TextView
android:id="@+id/tv_notice_item_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:text="06:28"
android:layout_marginRight="15dp"
android:textColor="#999999"
android:textSize="12dp"/>
</LinearLayout>
3.在res目录下新建anim文件,创建进入和退出xml
(1).animation_down_up_in_animation
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="500"
android:fromYDelta="100.0%p"
android:toYDelta="0.0"/>
<alpha
android:duration="500"
android:fromAlpha="0.0"
android:toAlpha="1.0"/>
</set>
(2).animation_down_up_out_animation
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="500"
android:fromYDelta="0.0"
android:toYDelta="-100.0%p"/>
<alpha
android:duration="500"
android:fromAlpha="1.0"
android:toAlpha="0.0"/>
</set>
4.activity代码
//全局变量
ViewFlipper vf_notice_scroll;
//实例化
vf_notice_scroll = findViewById(R.id.vf_notice_scroll);
//设置进出退出效果
vf_notice_scroll.setInAnimation(this, R.anim.animation_down_up_in_animation);
vf_notice_scroll.setOutAnimation(this, R.anim.animation_down_up_out_animation);
//设置数据
final List<String> list = new ArrayList<>();
list.add("今天周三拖后腿日发出");
list.add("今天周四官方的本合同人工湖");
list.add("今天周五会给他然后一天");
//循环数据
for (int i = 0; i < list.size(); i++) {
//添加item布局文件
View v = this.getLayoutInflater().inflate(R.layout.notice_item, null);
TextView titleTv = v.findViewById(R.id.tv_notice_item_itle);
//赋值
titleTv.setText(list.get(i));
final int finalI = i;
//点击监听
titleTv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ToastUtils.ToastCllShow("点击了" + list.get(finalI));
}
});
//添加这个view
vf_notice_scroll.addView(v);
}
//开始翻滚
vf_notice_scroll.startFlipping();