源码地址: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

仿小红书根据图片高度自适应viewpager高度轮播图相关推荐

  1. 关于小红书的小程序不同数量的轮播图,展示不一样的轮播指示点的实现

    用过小红书的人,应该注意到,小红书的详情页轮播模块做的有点花里胡哨,可谓天下产品一家亲.人家有的,我们也想有.于是在百度不到的情况下,只能自己想办法写类似的轮播指示点效果了. 先看想要实现的效果图: ...

  2. java轮播图_RxJava 实现ViewPager的轮播图

    前言 在App中实现一个轮播图已经是很多产品的标配了,很多人都会想到使用ViewPager + Handler来完成轮播图的效果.但是在RxJava快速发展的情况下,已经可以使用RxJava来代替Ha ...

  3. 使用ViewPager实现轮播图自动播放

    使用ViewPager实现轮播图自动播放 通过使用ViewPager实现图片的自动轮播,也可以通过将自动滑动关闭通过手动滑动进行图片的滑动,现在简单分析一下实现的步骤: 1.让图片滑动起来. 2.让图 ...

  4. android 仿小红书标签,仿小红书的图片标签

    Android 仿小红书图片标签,实现了图片标签的动画,布局,水波纹,编辑等功能,还可以自定义 Tag.视频演示地址 This is a library of tags that are attach ...

  5. 微信小程序 swiper轮播图高度宽度自适应(解决轮播图图片显示不全问题)

    之前从来没有接触过前端,最近开始学习微信小程序,因为没有基础所以学起来有点难度.在学习这个swiper标签的时候遇到了一些问题.首先一个问题就是轮播图中的图片显示不全,尽管已经给image设置成了wi ...

  6. html3d轮播图片效果,CSS3,3D效果轮播图

    ---恢复内遇新是直朋能到分览支体调容开始--- 大家还的候通现端数是制这.效合应近环大过这业据记得我昨天的3D拖拽立方体吗??我昨天还说过css还可以做轮播图,所以咱们今天就写一下,css的轮在重说 ...

  7. 用JS实现图片切换、定时器、轮播图

    一. 图片切换 实现功能: 当点击"下一页"时,跳转到下一张图片: 当点击"上一页"时,跳转到上一张照片: 显示当前页数/总页数,如:2/6. <!DOC ...

  8. 小红书 标签 HTML5,html5仿小红书的图片标签功能

    最近做了这样的一个功能,在wap网页上实现类似小红书app里的图片标签功能,很是蛋疼. 上传页示例如下图: 可以看到最上面的①是展示区域,也是编辑标签的操作区域:中间②是可滑动的缩略图,在此选择要编辑 ...

  9. 通过JavaScript实现图片的连续播放(轮播图)

    准备:该目录下存放的文件如下图所示: 目录中存放了四张图(用于图片的轮播)和两个html文件(即下面的两个实例). 以下是正文: 实例一:通过两个按钮last.next控制显示上一张图片和下一张图片. ...

最新文章

  1. GDCM:gdcm::IPPSorter的测试程序
  2. [游戏引擎中文版]YU-RIS 4.5 最新中文支持版
  3. 解决SVN:E210007无法协商认证机制
  4. 分析android动画模块[转]
  5. 合同的不含税与税额怎么算
  6. HTML+Javascript制作拼图小游戏详解(一)
  7. 《Java程序员面试秘笈》—— 1.3 线程信息的获取和设置
  8. 大学生活没钱你会学习还是打工? C2 翻译有感
  9. 截取网页中的Flash
  10. cart决策树Matlab实现,CART决策树的理解及其实现
  11. IDEA插件系列(94):Pomodoro-tm插件——番茄钟计时
  12. c语言中变量属性,C语言学习笔记--C语言中变量的属性关键字
  13. JavaWeb之AjaxJSON
  14. ios 开发者证书付费三种类型区别
  15. 产品经理与项目经理-从PMP到NPDP
  16. (附源码)SSM学生社团管理系统JAVA计算机毕业设计项目
  17. error C1083:无法打开文件stddef.h或crtd bg.h
  18. java快速排序的时间复杂度_程序猿必备排序算法及其时间复杂度分析
  19. c语言求n个数最大最小值,c语言 如何求n个数的最大值 最小值
  20. 控制用计算机论文,计算机在自动控制技术实践中的应用分析

热门文章

  1. 基于php的二手车交易网站的设计与实现
  2. c语言break能与if用吗,break可以用于if吗
  3. “机器狗”作者藐视法律公开出售病毒
  4. 天涯论坛几位高手的帐号
  5. python花瓣飘零_小白请上车 | Python抓取花瓣网高清美图
  6. Premiere Pro 2022安装了speech to text本地语言包以后还是不能离线使用
  7. 计算机自动化技术论文,自动化技术_计算机技术87884.pdf
  8. PySpider 框架
  9. 职坐标mysql_mysql数据库迁移greenplum讲解
  10. 基于Java EE的中国象棋网上对战的设计与实现