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下载