Android ViewFlipper构建轮番公告

这节要讲一下项目中使用ViewFlipper构建公告轮番,使用了ViewFlipper,具体介绍去看官方文档。

首先看一下布局吧:
<?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="@dimen/news_height"
android:background="@drawable/corner_news_bg"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingBottom="@dimen/common_padding_small"
android:paddingLeft="@dimen/common_padding_middle"
android:paddingTop="@dimen/common_padding_small">

<ImageView
    style="@style/WrapMatch"
    android:layout_marginRight="@dimen/common_margin_middle"
    android:src="@drawable/icon_news" />

<View
    style="@style/DividerFixedWidth"
    android:layout_marginRight="@dimen/common_margin_middle" />

<ViewFlipper
    android:id="@+id/mFlipperView"
    style="@style/MatchWrap"
    android:flipInterval="3000" />
</LinearLayout>

动画,因为ViewFlipper,需要使用:
news_bottom_in:

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
       android:duration="500"
       android:fromYDelta="100.0%p"
       android:toYDelta="0.0"/>

news_bottom_out:

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="500"
       android:fromYDelta="0.0"
       android:toYDelta="-100.0%p"/>

具体的代码实现:

/*
公告轮番
 */
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, this)
    mFlipperView = rootView.find(R.id.mFlipperView)
    mFlipperView.setInAnimation(context, R.anim.news_bottom_in)
    mFlipperView.setOutAnimation(context, R.anim.news_bottom_out)
}

/*
    构建公告内容
 */
fun buildNewsView(text: String): TextView {
    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) {
        mFlipperView.addView(buildNewsView(text))
    }
    mFlipperView.startFlipping()
}

}

其实也简单,就是根据数据,创建特定的View往ViewFlipper中添加,ViewFlipper会自动执行轮番,这里就不得不提Kotlin,这个Android官方第一语言,下周会总结一些自定义View和动画。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,034评论 25 709
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,054评论 3 119
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,484评论 4 61
  • 第二十四天。 药物对胃不好,孩子这几天或吐或干呕,很难受,今天一天没下床,晚上吃过饭出去厅里玩了。她说闷的慌我知道...
    谁的青春没有痘阅读 1,580评论 0 0
  • 新认知 1、 500强的CEO最担心的是人工智能和网络安全 就是说精英们到了一个新战场(数据战)而且还没足够认知 ...
    Rio的一些事一些情阅读 1,319评论 0 0

友情链接更多精彩内容