美文网首页IT类作者联盟我已不2
Android自定义跑马灯效果(适合任意布局)

Android自定义跑马灯效果(适合任意布局)

作者: 毛大姑娘 | 来源:发表于2019-06-05 21:03 被阅读10次

原文出处:https://maomao.ink/index.php/archives/492/

因为项目需要,做了一个Android自定义垂直跑马灯,分享给大家。

先上个效果图:

效果图 效果截图

从图片中可以看到布局是由包含两个TextView的布局组成,一般的垂直跑马灯效果只支持单个TextView,水平方向的跑马灯更是不需要自定义,原生TextView就支持。

我的需求不只于此,里面的布局复杂,网上的方案已经不满足我的需求,所以我参考别人的垂直跑马灯,自己写了一个支持任意布局的跑马灯效果。代码已上传至GitHub

源码分析见:原文

使用示例:

xml代码:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <com.verticalmarquee.maomao.verticalmarqueedemo.VerticalMarqueeLayout
        android:id="@+id/marquee_root"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</android.support.constraint.ConstraintLayout>

Activity代码:

package com.verticalmarquee.maomao.verticalmarqueedemo;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private VerticalMarqueeLayout marqueeRoot;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        marqueeRoot = findViewById(R.id.marquee_root);
        initData();
    }


    private void initData() {
        int count = 5;
        List<View> views = new ArrayList<>();
        LayoutInflater inflater = LayoutInflater.from(this);
        for (int i = 0; i < count; i++) {
            views.add(inflateView(inflater, marqueeRoot, "这是标题" + i, "这里是第" + i + "条内容"));
        }
        marqueeRoot.setViewList(views);
    }

    private View inflateView(LayoutInflater inflater, VerticalMarqueeLayout marqueeRoot, String name, String desc) {
        if (inflater == null) {
            inflater = LayoutInflater.from(this);
        }
        View view = inflater.inflate(R.layout.marquee_item, marqueeRoot, false);
        TextView viewName = view.findViewById(R.id.marquee_name);
        TextView viewDesc = view.findViewById(R.id.marquee_desc);
        viewName.setText(name);
        viewDesc.setText(desc);
        return view;
    }
}


最后修改于2019年5月20日,修改点如下:

  1. 修复因getCurrentView方法与父类方法重名导致被调用时出现空指针异常。
  2. 开始启动轮播动画和addView操作添加到post的Runnable里面,为避免在页面未显示前调用导致的异常。这样可以放心在任意地点调用setViewList方法。

赶紧试试吧,祝你成功!!!

(标签:Android、跑马灯)

相关文章

网友评论

    本文标题:Android自定义跑马灯效果(适合任意布局)

    本文链接:https://www.haomeiwen.com/subject/jpxexctx.html