ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

AdapterViewFlipper 图片_文字 轮播动画控件,腾讯T3亲自教你

2021-09-12 13:02:28  阅读:98  来源: 互联网

标签:控件 AdapterViewFlipper 轮播 private override fun position imgFlipper


  *   `showPrevious`、`showNext`:上一个、下一个
  1. 轮播状态与参数

    • isFlipping:是否轮播中
    • flipInterval: 动画间隔
  2. 设置入场、出场动画:setInAnimationsetOutAnimation

3. 文字/图片 轮播 Demo

 /**
 * 图片/文字轮播
 * 坑点:text_flipper height 如果设置wrap_content 导致item宽度只会以第一个item的为准
 */
class FlipperAnimActivity : AppCompatActivity(), View.OnClickListener {

    private var textFlipper: AdapterViewFlipper? = null
    private var imgFlipper: AdapterViewFlipper? = null
    private var preBtn: Button? = null
    private var nextBtn: Button? = null
    private var autoBtn: Button? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_flipper_anim)
        initTextFlipper()
        initImgFlipper()
    }

    // 文字轮播
    private fun initTextFlipper() {
        textFlipper = findViewById(R.id.text_flipper)
        val list = listOf("文字轮播测试0", "文字轮播测试02...")
        textFlipper?.adapter = TextFlipperAdapter(this, list)
        textFlipper?.setInAnimation(this, R.animator.text_flipper_in_from_bottom)
        textFlipper?.setOutAnimation(this, R.animator.text_flipper_out_to_top)
//        textFlipper?.flipInterval
//        textFlipper?.startFlipping()
    }

    // 图片轮播
    private fun initImgFlipper() {
        imgFlipper = findViewById(R.id.img_flipper)
        val list = listOf("http://www.nicesoso.com/test/file/img/test.jpg", "http://www.nicesoso.com/test/file/img/test_h_1.jpg",
                "http://www.nicesoso.com/test/file/img/test_h_2.jpg")
        imgFlipper?.adapter = ImgFlipperAdapter(this, list)
        imgFlipper?.setInAnimation(this, R.animator.img_flipper_in)
        preBtn = findViewById(R.id.prev_btn)
        nextBtn = findViewById(R.id.next_btn) as Button
        autoBtn = findViewById(R.id.auto_btn) as Button

        preBtn?.setOnClickListener(this)
        nextBtn?.setOnClickListener(this)
        autoBtn?.setOnClickListener(this)
    }

    override fun onClick(v: View?) {
        when (v?.id) {
            R.id.prev_btn -> {
                imgFlipper?.showPrevious()
                imgFlipper?.stopFlipping()
            }
            R.id.next_btn -> {
                imgFlipper?.showNext()
                imgFlipper?.stopFlipping()
            }
            R.id.auto_btn -> {
                imgFlipper?.startFlipping()
            }
        }
    }

    override fun onDestroy() {
        super.onDestroy()
        textFlipper?.takeIf { it.isFlipping }?.stopFlipping()
        imgFlipper?.takeIf { it.isFlipping }?.stopFlipping()
    }
} 

3.1 文字轮播:TextFlipperAdapter

class TextFlipperAdapter(private val context: Context, private val datas: List<String>) : BaseAdapter() {
    override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
        val view = convertView ?: LayoutInflater.from(context).inflate(R.layout.item_flipper_text, parent, false)
        val textView = view?.findViewById<TextView?>(R.id.text)
        textView?.text = datas.get(position)
        return view
    }

    override fun getItem(position: Int): Any {
        return datas.get(position)
    }

    override fun getItemId(position: Int): Long {
        return position.toLong()
    }

    override fun getCount(): Int {
        return datas.size
    }
} 

3.2 图片轮播:ImgFlipperAdapter

class ImgFlipperAdapter(private val context: Context, private val datas: List<String>) : BaseAdapter() {
    override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
        val view = convertView ?: ImageView(context)
        (view as? ImageView)?.scaleType = ImageView.ScaleType.FIT_XY
        view.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)
        (view as? ImageView)?.let { Glide.with(context).load(datas.get(position)).into(it) }  

        return view
    }

    override fun getItem(position: Int): Any {
        return datas.get(position)
    }

    override fun getItemId(position: Int): Long {
        return position.toLong()
    }

    override fun getCount(): Int {
        return datas.size
    }
} 

3.3 布局:activity_flipper_anim.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:orientation="vertical">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:background="@android:color/holo_red_light"
        android:orientation="vertical">

        <!--宽高要必须设置填充满,否则wrap_content时,大小变成第一个item的大小-->


> **《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》**
> **网盘:pan.baidu.com/s/1uXQ5fqJkNbGiaj5iXGzdrQ**
> **提取码:sei4**


**最后送福利了,现在关注我可以获取包含源码解析,自定义View,动画实现,架构分享等。
内容难度适中,篇幅精炼,每天只需花上十几分钟阅读即可。
大家可以跟我一起探讨,有flutter—底层开发—性能优化—移动架构—资深UI工程师 —NDK相关专业人员和视频教学资料,还有更多面试题等你来拿**

**[CodeChina开源项目地址:https://codechina.csdn.net/m0_60958482/android_p7](

)**

![录播视频图.png](https://www.icode9.com/i/ll/?i=img_convert/91a9df01bb5efb9ed7f00b0023661ab6.png)

—资深UI工程师 —NDK相关专业人员和视频教学资料,还有更多面试题等你来拿**

**[CodeChina开源项目地址:https://codechina.csdn.net/m0_60958482/android_p7](

)**

[外链图片转存中...(img-1TIqIZz8-1631422632855)]

标签:控件,AdapterViewFlipper,轮播,private,override,fun,position,imgFlipper
来源: https://blog.csdn.net/m0_61331491/article/details/120249484

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有