当前位置: 首页 > news >正文

东莞外贸公司网站建设网站建设开发设计营销公司厦门

东莞外贸公司网站建设,网站建设开发设计营销公司厦门,个体工商户 网站备案,建设网站平台哪个好需求 在项目中#xff0c;我们常常遇到需要动态调整 ViewPager 的高度#xff0c;以适应其内容大小的需求。默认情况下#xff0c;ViewPager 的高度是固定的#xff0c;无法根据每个页面的内容高度进行调整。这会导致在内容高度不一致时#xff0c;出现不必要的空白区域或…需求 在项目中我们常常遇到需要动态调整 ViewPager 的高度以适应其内容大小的需求。默认情况下ViewPager 的高度是固定的无法根据每个页面的内容高度进行调整。这会导致在内容高度不一致时出现不必要的空白区域或者内容被裁剪的情况。为了解决这个问题我们设计了一个 AutoHeightViewPager能够根据当前显示页面的内容高度动态调整自身的高度保证内容完整且没有多余的空白。 效果 实现思路 1. 动态高度调整 首先我们需要一个自定义的 ViewPager 类 AutoHeightViewPager这个类可以根据当前页面的内容高度来动态调整自身的高度。通过重写 onMeasure 方法可以在滑动过程中动态计算页面的高度并调整布局。 2. 监听页面滑动事件 为了平滑过渡我们需要监听页面的滑动过程并计算滑动比例将当前页面的高度与下一个页面的高度按比例过渡实现平滑过渡效果。 3. 自定义 Adapter 自定义的 PagerAdapter 必须实现一个接口 AutoHeightPager用于获取指定位置页面的 View这样我们可以测量页面内容的高度。 实现代码 1. AutoHeightViewPager package com.yxlh.androidxy.demo.ui.viewpager.vpimport android.content.Context import android.util.AttributeSet import android.view.View import androidx.viewpager.widget.PagerAdapter import androidx.viewpager.widget.ViewPagerinterface AutoHeightPager {fun getView(position: Int): View? }class AutoHeightViewPager JvmOverloads constructor(context: Context,attrs: AttributeSet? null ) : ViewPager(context, attrs) {private var lastWidthMeasureSpec: Int 0private var currentHeight: Int 0private var lastPosition: Int 0private var isScrolling: Boolean falseinit {addOnPageChangeListener(object : SimpleOnPageChangeListener() {override fun onPageScrolled(position: Int,positionOffset: Float,positionOffsetPixels: Int) {if (positionOffset 0f) {isScrolling falserequestLayout()return}val srcPosition if (position lastPosition) position else position 1val destPosition if (position lastPosition) position 1 else positionval srcHeight getViewHeight(srcPosition)val destHeight getViewHeight(destPosition)currentHeight (srcHeight (destHeight - srcHeight) *if (position lastPosition) positionOffset else 1 - positionOffset).toInt()isScrolling truerequestLayout()}override fun onPageScrollStateChanged(state: Int) {if (state SCROLL_STATE_IDLE) {lastPosition currentItem}}})}override fun setAdapter(adapter: PagerAdapter?) {require(adapter null || adapter is AutoHeightPager) { PagerAdapter must implement AutoHeightPager. }super.setAdapter(adapter)}private fun getViewHeight(position: Int): Int {val adapter adapter as? AutoHeightPager ?: return 0return run {val view adapter.getView(position) ?: return 0view.measure(lastWidthMeasureSpec,MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED))view.measuredHeight}}override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {lastWidthMeasureSpec widthMeasureSpecvar heightSpec heightMeasureSpecif (isScrolling) {heightSpec MeasureSpec.makeMeasureSpec(currentHeight, MeasureSpec.EXACTLY)} else {getViewHeight(currentItem).takeIf { it 0 }?.let {heightSpec MeasureSpec.makeMeasureSpec(it, MeasureSpec.EXACTLY)}}super.onMeasure(widthMeasureSpec, heightSpec)} }2. AutoHeightPagerAdapter package com.yxlh.androidxy.demo.ui.viewpagerimport android.view.View import android.view.ViewGroup import androidx.viewpager.widget.PagerAdapter import com.yxlh.androidxy.demo.ui.viewpager.vp.AutoHeightPagerclass AutoHeightPagerAdapter : PagerAdapter(), AutoHeightPager {private val viewList mutableListOfView()override fun instantiateItem(container: ViewGroup, position: Int): Any {val view viewList[position]val parent view.parent as? ViewGroupparent?.removeView(view)container.addView(view)return view}override fun destroyItem(container: ViewGroup, position: Int, object: Any) {container.removeView(object as View)}fun setViews(views: ListView) {viewList.clear()viewList.addAll(views)notifyDataSetChanged()}override fun getView(position: Int): View? {return viewList.getOrNull(position)}override fun getCount(): Int {return viewList.size}override fun isViewFromObject(view: View, object: Any): Boolean {return view object} }3. Activity 代码 package com.yxlh.androidxy.demo.ui.viewpagerimport android.os.Bundle import android.view.LayoutInflater import android.view.View import androidx.appcompat.app.AppCompatActivity import com.yxlh.androidxy.R import com.yxlh.androidxy.demo.ui.viewpager.vp.AutoHeightViewPagerclass VpActivity : AppCompatActivity() {private var mAutoHeightVp: AutoHeightViewPager? nullprivate var mAdapter: AutoHeightPagerAdapter? nulloverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_vp)val viewList: MutableListView ArrayList()viewList.add(LayoutInflater.from(this).inflate(R.layout.view_demo_1, null))viewList.add(LayoutInflater.from(this).inflate(R.layout.view_demo_2, null))mAutoHeightVp findViewById(R.id.viewpager)mAutoHeightVp?.setAdapter(AutoHeightPagerAdapter().also { mAdapter it })mAdapter?.setViews(viewList)mAutoHeightVp?.setCurrentItem(1)} }4. 布局 XML ?xml version1.0 encodingutf-8? androidx.constraintlayout.widget.ConstraintLayoutxmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:apphttp://schemas.android.com/apk/res-autoandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroidx.core.widget.NestedScrollViewandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentapp:layout_constraintTop_toTopOfparentLinearLayoutandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:orientationverticalcom.yxlh.androidxy.demo.ui.viewpager.vp.AutoHeightViewPagerandroid:idid/viewpagerandroid:layout_widthmatch_parentandroid:layout_heightwrap_content /ImageViewandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:adjustViewBoundstrueandroid:scaleTypefitXYandroid:srcdrawable/vp_content //LinearLayout/androidx.core.widget.NestedScrollView/androidx.constraintlayout.widget.ConstraintLayout总结 通过自定义 ViewPager 的动态高度适配功能我们可以解决内容高度不一致导致的布局问题。这种方案可以适应不同页面内容的高度变化实现平滑的过渡效果非常适用于动态内容展示的场景。
http://www.w-s-a.com/news/940423/

相关文章:

  • 视频在线制作网站wordpress怎么调用友情链接
  • 做微商什么是官方网站温州阀门外贸网站建设
  • 申请主机网站网站建设平台合同模板
  • 如何做ps4的游戏视频网站海口网红图书馆
  • 福建住房和城乡建设局网站做私人小网站赚钱吗
  • 物流的网站模板wordpress网站 800cdn
  • 建站公司合肥做精品课程网站需要啥素材
  • 成都三合一网站建设网站建设教程自学网
  • 门户网站跳出率wordpress火车头采集教程
  • 天津做网站的网络公司wordpress免费的模板
  • 有哪些关于校园内网站建设的法律如何申请免费网站空间
  • 玉溪市网站建设龙口网页定制
  • 网站开发都用什么软件上海景观设计公司10强
  • 网站建设氵金手指下拉十二深圳网站建设售后服务
  • 上海网站设计价青海企业网站制作
  • 静态网站做新闻系统深圳外贸网站建设哪家好
  • 网站如何做词360免费wifi老是掉线怎么办
  • 网站建设分金手指排名十八iis10 wordpress
  • 成都网站优化公司哪家好网站建设帮助中心
  • 做外单什么网站好佛山市建设企业网站服务机构
  • 哪些网站是单页面应用程序北京门头沟山洪暴发
  • 织梦(dedecms)怎么修改后台网站默认"织梦内容管理系统"标题关键词优化收费标准
  • 网站设计和备案企业官网网站建设免费
  • 公司概况-环保公司网站模板搜索引擎营销的基本流程
  • 门户网站建设经验天津市建设银行租房网站
  • 百度推广 帮做网站吗怎样修改网站的主页内容
  • 网站怎么做dns解析公司官网改版方案
  • 湛江市住房和城乡建设局网站杭州网站公司哪家服务好
  • 设计网站公司湖南岚鸿设计镜像的网站怎么做排名
  • 你注册过哪些网站微信app下载安装官方版2019