您的位置:首页 > 其它

viewPager item 变高在项目中的使用

2017-08-20 13:57 281 查看
1 几大主流的ota 的地图中增加滑动的效果,这样使用到viewpager 这个控件,但是业务场景是要求每个Item 变高,效果图如下



需要重写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