Android开发之——跑马灯效果

前言

在看商城类的项目时,如淘宝头条,京东头条,经常会看到跑马灯效果,上下轮播显示热门商品!

跑马灯效果

实现跑马灯效果,我们可以借助于第三方和自己实现两种方式,下面我们将介绍一下:

借助于第三方提供

MarqueeView

  • 项目地址:
    MarqueeView
  • 使用方式:

XMarqueeView

  • 项目地址:
    XMarqueeView
  • 使用方式

自己实现

本文的跑马灯是借助于ViewFlipper实现的

ViewFlipper

将两个或更多的子view添加到它上面,每次只显示一个子view,按照周期依次显示子view(个人翻译)原文请参考:

自定义view

class NewsFlipperView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0) : FrameLayout(context, attrs, defStyleAttr) {
private val mFlipperView: ViewFlipper

init 
{
    val rootView = View.inflate(context, R.layout.layout_news_flipper, null)
    mFlipperView = rootView.find(R.id.mFlipperView)
    mFlipperView.setInAnimation(context, R.anim.news_bottom_in)
    mFlipperView.setOutAnimation(context, R.anim.news_bottom_out)
    addView(rootView)
}


/*
    构建公告
 */
private fun buildNewsView(text: String): View 
{
    val textView = TextView(context)
    textView.text = text
    textView.textSize = px2sp(dimen(R.dimen.text_small_size))
    textView.layoutParams = LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)
    return textView
}

    /*
        设置公告数据
     */
    fun setData(data: Array<String>) 
    {
        for (text in data) 
        {
              var view=  buildNewsView(text)
            mFlipperView.addView(view)
               view.setOnClickListener({ _ ->
               mOnItemClickListener!!.onItemClick( text)
                })

        }
        mFlipperView.startFlipping()
    }
    private var mOnItemClickListener: OnItemClickListener<String>? = null
    interface OnItemClickListener<in String> 
    {
        fun onItemClick(data: String)
    }

    fun <T> setOnItemClickListener(listener: OnItemClickListener<String>) 
    {
        mOnItemClickListener = listener
    }
}

使用自定义view

    mNewsFlipperView.setData(arrayOf("小米MIX2发布","抢眼Couple装,点亮情人节"))
    mNewsFlipperView.setOnItemClickListener<String>(object : NewsFlipperView.OnItemClickListener<String> {
        override fun onItemClick( data: String) {
            toast(data)
        }

    })

效果

其他

参考:Github下载