热门头条的实现—MarqueeView、ViewFlipper

本文介绍两种实现类似淘宝热门头条效果的方法:使用ViewFlipper和MarqueeView。通过示例代码展示了如何设置布局、添加文本视图及实现自动翻页功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

类似于淘宝热门头条的实现——ViewFlipper。布局文件:
<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_vertical"
        android:orientation="horizontal"
        android:padding="20px">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@mipmap/bulletin" />

        <ViewFlipper
            android:id="@+id/viewflipper"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="30px">
        </ViewFlipper>
    </LinearLayout>
主要代码如下:
public class ViewFlipper1 extends Activity{
    private ViewFlipper viewFlipper;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.actitivity_view_flipper);
        viewFlipper =(ViewFlipper) findViewById(R.id.viewflipper);
        for (int i = 0; i < 5; i++) {
            viewFlipper.addView(getTextViewTitle("这里是热门头条" + i));
        }
        //点击事件
        viewFlipper.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(ViewFlipper1.this, viewFlipper.getDisplayedChild()+"", Toast.LENGTH_SHORT).show();
            }
        });
        viewFlipper.setFlipInterval(1500);//多长时间换下一个
        viewFlipper.startFlipping();
    }
    private TextView getTextViewTitle(String title) {
        TextView textView = new TextView(this);
        textView.setGravity(Gravity.CENTER_VERTICAL);
        textView.setText(title);
        return textView;
    }
}
这里没法直接加文字,我是先手动创建TextView,然后把标题设置好,添加到ViewFlipper。没有设置动画,要设置动画自己写。为了增加用户体验可以在onstart(),onStop()写对应的方法startFlipping()、stopFlipping()。
然后是一个第三方的——MarqueeView,首先依赖
compile 'com.sunfusheng:marqueeview:1.2.0'
布局文件如下:
<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_vertical"
        android:orientation="horizontal"
        android:padding="20px">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@mipmap/bulletin"
            android:layout_marginLeft="30px"/>
        <com.sunfusheng.marqueeview.MarqueeView
            android:id="@+id/marqueeView"
            android:layout_width="match_parent"
            android:layout_height="30dp"
            android:layout_marginLeft="30px"
            app:mvAnimDuration="500"
            app:mvInterval="2000"
            app:mvTextColor="@color/colorAccent"
            app:mvTextSize="14sp"
            app:mvSingleLine="true"/>
    </LinearLayout>
属性:
Attribute 属性    Description 描述
mvAnimDuration  一行文字动画执行时间
mvInterval  两行文字翻页时间间隔
mvTextSize  文字大小
mvTextColor 文字颜色
mvGravity   文字位置:left、center、right
mvSingleLine    单行设置
主要代码如下:
public class MarqueeView1 extends Activity{
    private MarqueeView marqueeView;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_view_marquee);
        marqueeView = (MarqueeView) findViewById(R.id.marqueeView);
        List<String> info = new ArrayList<>();
        for (int i = 0; i < 5; i++) {
            info.add("这里是热门头条" + i);
        }
        marqueeView.startWithList(info);
        //点击事件
        marqueeView.setOnItemClickListener(new MarqueeView.OnItemClickListener() {
            @Override
            public void onItemClick(int position, TextView textView) {
                Toast.makeText(getApplicationContext(), String.valueOf(marqueeView.getPosition()) + ". " + textView.getText(), Toast.LENGTH_SHORT).show();
            }
        });
    }

    @Override
    public void onStart() {
        super.onStart();
        marqueeView.startFlipping();
    }

    @Override
    public void onStop() {
        super.onStop();
        marqueeView.stopFlipping();
    }
}
这里就直接调用对应的方法,传对应的变量就可以了,还有动画。

项目链接

俗名:垂直跑马灯;学名:垂直翻页公告使用Gradle:compile 'com.sunfusheng:marqueeview:1.1.0'属性Attribute 属性Description 描述mvAnimDuration一行文字动画执行时间mvInterval两行文字翻页时间间隔mvTextSize文字大小mvTextColor文字颜色mvGravity文字位置:left、center、rightmvSingleLine单行设置xml<com.sunfusheng.marqueeview.MarqueeView     android:id="@ id/marqueeView"     android:layout_width="match_parent"     android:layout_height="30dp"     app:mvAnimDuration="1000"     app:mvInterval="3000"     app:mvTextColor="@color/white"     app:mvTextSize="14sp"     app:mvSingleLine="true"/>设置列表数据MarqueeView marqueeView = (MarqueeView) findViewById(R.id.marqueeView); List<String> info = new ArrayList<>(); info.add("1. 大家好,我是孙福生。"); info.add("2. 欢迎大家关注我哦!"); info.add("3. GitHub帐号:sfsheng0322"); info.add("4. 新浪微博:孙福生微博"); info.add("5. 个人博客:sunfusheng.com"); info.add("6. 微信公众号:孙福生"); marqueeView.startWithList(info);设置字符串数据String notice = "心中有阳光,脚底有力量!心中有阳光,脚底有力量!心中有阳光,脚底有力量!"; marqueeView.startWithText(notice);设置事件监听marqueeView.setOnItemClickListener(new MarqueeView.OnItemClickListener() {     @Override     public void onItemClick(int position, TextView textView) {         Toast.makeText(getApplicationContext(), String.valueOf(marqueeView1.getPosition())   ". "   textView.getText(), Toast.LENGTH_SHORT).show();     } });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海晨忆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值