viewPager item 变高在项目中的使用
2017-08-20 13:57
281 查看
1 几大主流的ota 的地图中增加滑动的效果,这样使用到viewpager 这个控件,但是业务场景是要求每个Item 变高,效果图如下
需要重写viewpager,实现的代码如下:
在代码中设置设置监听 然后去动态的算高度,自适应。
对应的adapter 为:
在viewpager 页边进行滑动的时候,我门可以添加监听把实时获取的高度回调出去。
需要重写viewpager,实现的代码如下:
package ctrip.android.hotel.map.view; import android.content.Context; import android.support.v4.view.ViewPager; import android.util.AttributeSet; import android.util.Log; import android.view.View; /** * 根据View的内容自动适应高度的ViewPager * Created by bkhu on 17/8/15. */ public class HotelAutoFitViewPager extends ViewPager { private static final String TAG = "HotelAutoFitViewPager"; private ISelectListener mSelectListener; private IViewHeightListener mViewHeightListener; private int mPosition; public HotelAutoFitViewPager(Context context) { this(context, null); } public HotelAutoFitViewPager(Context context, AttributeSet attrs) { super(context, attrs); addOnPageChangeListener(new OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { mPosition = position; if (mSelectListener != null){ mSelectListener.setPageSelected(mPosition); } requestLayout(); } @Override public void onPageScrollStateChanged(int state) { } }); } public void setSelectListener(ISelectListener selectListener){ mSelectListener = selectListener; } public void setViewHeightListener(IViewHeightListener viewHeightListener){ mViewHeightListener = viewHeightListener; } public interface ISelectListener{ void setPageSelected(int position); } public interface IViewHeightListener{ void setItemHeight(int height); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int height = 0; for (int i = 0; i < getChildCount(); i++) { View child = getChildAt(i); child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); int h = child.getMeasuredHeight(); if (h > height) height = h; } if (mViewHeightListener != null){ mViewHeightListener.setItemHeight(height); } heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY); super.onMeasure(widthMeasureSpec, heightMeasureSpec); } }
在代码中设置设置监听 然后去动态的算高度,自适应。
对应的adapter 为:
public class HotelListMapHotelInfoAdapter extends PagerAdapter{ @Override public int getCount() { return mHotelDataList.size() > 0 ? mHotelDataList.size() : 0; } @Override public boolean isViewFromObject(View view, Object o) { return view == o; } @Override public Object instantiateItem(ViewGroup view, int position) { View currentView = mInflater.inflate(R.layout.hotel_list_map_hotel_info_item_layout, view, false); ViewHolder viewHolder = new ViewHolder(currentView, mActivity); refreshData(currentView, position, viewHolder); currentView.setTag(position); currentView.setOnClickListener(mOnClickListener); view.addView(currentView); return currentView; } } .........
在viewpager 页边进行滑动的时候,我门可以添加监听把实时获取的高度回调出去。
相关文章推荐
- 怎么设置viewpager在使用setCurrentItem的滑动速度
- Github项目解析(十三)-->使用Kotlin实现UC头条ViewPager左右滑动效果
- 【转载】10.1\t使用项目视图类(Using the Item View Convenience Classes)
- 【新建项目&使用viewPager】实现一个Android电子书阅读APP
- 【新建项目&使用viewPager】实现一个Android电子书阅读APP
- android viewpager显示三个item(横屏使用)-笔记
- 如何解决Android在eclipse中项目同时使用viewpagerindicator,slidingmenu开源框架时项目报错的问题
- 关于viewpager_indicator_master开源项目使用详解
- 有关ViewPager使用及解决ViewPager的item需要展示多个控件
- JazzyViewPager开源项目的简析及使用
- 开源项目PullToRefresh详解(四)——PullToRefreshListView和ViewPager的结合使用
- Android项目ViewPager+Fragment的基本使用
- 高效开发-使用7.0 sdk 开发ViewPager 翻页每个ITem 居中
- 开源项目PullToRefresh详解(四)——PullToRefreshListView和ViewPager的结合使用
- 【新建项目&使用viewPager】实现一个Android电子书阅读APP
- 设置viewpager在使用setCurrentItem的滑动速度
- 使用Fragment作为Item的ViewPager不更新问题.
- 【转载】10.1\t使用项目视图类(Using the Item View Convenience Classes)
- 怎么设置viewpager在使用setCurrentItem的滑动速度
- 黑马北京新闻项目连载(5)--->ViewPagerIndicator结合PagerAdapter使用