仿小红书根据图片高度自适应viewpager高度轮播图
来源:互联网 发布:恒扬数据股份有限公司 编辑:程序博客网 时间:2024/06/05 10:26
源码地址:http://download.csdn.net/detail/qq_34262695/9805267
之前不了解小红书,直到有一天经理说看见一个他想要的效果,跟小红书一样,赶紧下载小红书来看看,写起来贼费劲的一个自适应viewpager高度的轮播图。
效果图:
直接粘代码了:main_activity
<?xml version="1.0" encoding="utf-8"?><ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:fillViewport="true" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:fillViewport="true" android:orientation="vertical"> <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="wrap_content" /> <TextView android:layout_width="match_parent" android:layout_height="800dp" android:background="#ff4422" android:text="Hello World!" /> </LinearLayout></ScrollView>
MainActivity:
public class MainActivity extends AppCompatActivity { private ViewPager mViewpager; private String[] urls = { "http://f.hiphotos.baidu.com/zhidao/pic/item/3b87e950352ac65cbdbeff61fcf2b21193138a6d.jpg" , "http://c.hiphotos.baidu.com/zhidao/pic/item/562c11dfa9ec8a1359aa88b6f103918fa0ecc030.jpg", "http://c.hiphotos.baidu.com/zhidao/pic/item/faf2b2119313b07e6077d3bc0ad7912396dd8cb8.jpg" }; private int[] imgheights; private int screenWidth; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); screenWidth = ScreenUtil.getScreenWidth(this); initView(); } public void initView() { mViewpager = (ViewPager) findViewById(R.id.viewpager); Glide.with(this).load(urls[0]).asBitmap().into(new SimpleTarget<Bitmap>() { @Override public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) { float scale = (float) resource.getHeight() / resource.getWidth(); int defaultheight = (int) (scale * screenWidth); initViewPager(defaultheight); } }); } //获取第一张图片高度后,给viewpager设置adapter private void initViewPager(final int defaultheight) { mViewpager.setAdapter(new PagerAdapter() { @Override public int getCount() { if (imgheights == null || imgheights.length != urls.length) { imgheights = null; imgheights = new int[urls.length]; } return urls.length; } @Override public Object instantiateItem(ViewGroup container, final int position) { final ImageView imageView = new ImageView(MainActivity.this); imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); Glide.with(getApplicationContext()).load(urls[position]).asBitmap().placeholder(R.mipmap.ic_launcher).into(new ImageViewTarget<Bitmap>(imageView) { @Override protected void setResource(Bitmap loadedImage) { if (loadedImage != null) { float scale = (float) loadedImage.getHeight() / loadedImage.getWidth(); imgheights[position] = (int) (scale * screenWidth); imageView.setImageBitmap(loadedImage); } else { Toast.makeText(MainActivity.this, "图片为空", Toast.LENGTH_LONG).show(); } } }); container.addView(imageView); return imageView; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } }); //为ViewPager设置高度 ViewGroup.LayoutParams params = mViewpager.getLayoutParams(); params.height = defaultheight; mViewpager.setLayoutParams(params); mViewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { if (position == imgheights.length - 1) { return; } //计算ViewPager现在应该的高度,heights[]表示页面高度的数组。 int height = (int) ((imgheights[position] == 0 ? defaultheight : imgheights[position]) * (1 - positionOffset) + (imgheights[position + 1] == 0 ? defaultheight : imgheights[position + 1]) * positionOffset); //为ViewPager设置高度 ViewGroup.LayoutParams params = mViewpager.getLayoutParams(); params.height = height; mViewpager.setLayoutParams(params); } @Override public void onPageSelected(int position) { } @Override public void onPageScrollStateChanged(int state) { } }); }}还需要一个获得屏幕宽高的工具类:
/** * 获得屏幕宽度 * * @param context * @return */public static int getScreenWidth(Context context) { WindowManager wm = (WindowManager) context .getSystemService(Context.WINDOW_SERVICE); DisplayMetrics outMetrics = new DisplayMetrics(); wm.getDefaultDisplay().getMetrics(outMetrics); return outMetrics.widthPixels;}/** *获取屏幕高度 */public static int getScreenHight(Context context){ WindowManager wm = (WindowManager) context .getSystemService(Context.WINDOW_SERVICE); DisplayMetrics outMetrics = new DisplayMetrics(); wm.getDefaultDisplay().getMetrics(outMetrics); return outMetrics.heightPixels;}恩,大概就这样,自己看吧。~~~
源码地址:http://download.csdn.net/detail/qq_34262695/9805267
0 0
- 仿小红书根据图片高度自适应viewpager高度轮播图
- ViewPager的高度根据item的高度自适应
- ViewPager的高度根据item的高度自适应
- 仿小红书顶部自适应高度viewpager
- Android 根据图片高度动态设置ViewPager高度
- ViewPager高度自适应
- ViewPager高度自适应
- ViewPager高度自适应
- ViewPager自适应高度问题
- Textarea 高度自适应 根据内容自适应高度
- Textarea 高度自适应 根据内容自适应高度
- ScrollView嵌套ViewPager,网络获取图片自适应高度
- Android 中ViewPager自适应图片高度的问题
- 图片宽高度自适应
- 图片高度自适应
- 图片高度自适应
- Android中viewpager自适应高度
- ViewPager自适应高度和宽度
- python json转化操作
- eclipse注意事项
- android-支持多种屏幕[最佳做法] 八
- pcl 点投影到某个平面
- [UVA]572 oil disposition
- 仿小红书根据图片高度自适应viewpager高度轮播图
- Java三大主流框架概述
- oracle dba 一天
- Struts2执行流程
- Linux文件系统简介
- TCP/IP协议族——IP分组的交付和转发
- Java I/O系统
- .git目录删不掉
- Android mmm单独编译模块 错误提示 APPS/Settings_intermediates/classes-full-debug.jar] Error 41