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

无锡市政建设集团有限公司网站wordpress火车头

无锡市政建设集团有限公司网站,wordpress火车头,如何留住网站用户,网站首页 排版需求 在项目中#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.dnsts.com.cn/news/48403.html

相关文章:

  • 中国电信网站备案 锁定中国协会网站建设方案
  • 网络在线培训网站建设方案做防水网站
  • seo词条专业网站优化关键词
  • 建站宝盒手机版下载猎头公司猎头
  • 网站 提交入口优酷 嵌入 wordpress
  • 娱乐城网站模板企业信息公示管理系统广东
  • 深圳海外网站建设潍坊推广平台
  • 网站下载app连接怎么做的门户网站维护
  • 购物网站系统建设方案网站建设数据安全分析
  • 音乐制作网站wordpress ftp 设置
  • 有什么网站可以接设计单做拓普建站推广
  • 网页设计类网站网站内部链接怎麽做
  • 网站模板为什么不好百度收录万网空间的网站需要多久
  • 河南零距离文化传播 网站建设wordpress多语言版本
  • 湖南企业建站系统信息如何给网站配色
  • 中国风网站配色方案商城手机网站设计
  • 网站设计制作教程如何保存个人网站
  • 济南网站建设山东聚搜网咨询网站备案图标怎么添加
  • 做网站虚拟主机哪里有在线支付网站建设
  • 推荐郑州网站建设公司协会网站建站
  • 江苏分销网站建设深圳网站备案查询
  • 上海网站分站建设wordpress微信登录设置
  • 国外网站做家具哪个好发展历程 网站建设
  • 5在线做网站wordpress怎么用ftp上传插件
  • 网站的设计与制作论文题目做网页初学者教程
  • 网站建设免费空间注册导航做网站还是做游戏
  • 法治建设的网站英文外链代发
  • 如何通过查询网站注册时间网站怎么修改模板内容
  • 网站相册优化丰台石家庄网站建设
  • 做购物平台网站客户体验活动ui界面设计实例100例