仿小红书根据图片高度自适应viewpager高度轮播图
源码地址: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高度轮播图相关推荐
- 关于小红书的小程序不同数量的轮播图,展示不一样的轮播指示点的实现
用过小红书的人,应该注意到,小红书的详情页轮播模块做的有点花里胡哨,可谓天下产品一家亲.人家有的,我们也想有.于是在百度不到的情况下,只能自己想办法写类似的轮播指示点效果了. 先看想要实现的效果图: ...
- java轮播图_RxJava 实现ViewPager的轮播图
前言 在App中实现一个轮播图已经是很多产品的标配了,很多人都会想到使用ViewPager + Handler来完成轮播图的效果.但是在RxJava快速发展的情况下,已经可以使用RxJava来代替Ha ...
- 使用ViewPager实现轮播图自动播放
使用ViewPager实现轮播图自动播放 通过使用ViewPager实现图片的自动轮播,也可以通过将自动滑动关闭通过手动滑动进行图片的滑动,现在简单分析一下实现的步骤: 1.让图片滑动起来. 2.让图 ...
- android 仿小红书标签,仿小红书的图片标签
Android 仿小红书图片标签,实现了图片标签的动画,布局,水波纹,编辑等功能,还可以自定义 Tag.视频演示地址 This is a library of tags that are attach ...
- 微信小程序 swiper轮播图高度宽度自适应(解决轮播图图片显示不全问题)
之前从来没有接触过前端,最近开始学习微信小程序,因为没有基础所以学起来有点难度.在学习这个swiper标签的时候遇到了一些问题.首先一个问题就是轮播图中的图片显示不全,尽管已经给image设置成了wi ...
- html3d轮播图片效果,CSS3,3D效果轮播图
---恢复内遇新是直朋能到分览支体调容开始--- 大家还的候通现端数是制这.效合应近环大过这业据记得我昨天的3D拖拽立方体吗??我昨天还说过css还可以做轮播图,所以咱们今天就写一下,css的轮在重说 ...
- 用JS实现图片切换、定时器、轮播图
一. 图片切换 实现功能: 当点击"下一页"时,跳转到下一张图片: 当点击"上一页"时,跳转到上一张照片: 显示当前页数/总页数,如:2/6. <!DOC ...
- 小红书 标签 HTML5,html5仿小红书的图片标签功能
最近做了这样的一个功能,在wap网页上实现类似小红书app里的图片标签功能,很是蛋疼. 上传页示例如下图: 可以看到最上面的①是展示区域,也是编辑标签的操作区域:中间②是可滑动的缩略图,在此选择要编辑 ...
- 通过JavaScript实现图片的连续播放(轮播图)
准备:该目录下存放的文件如下图所示: 目录中存放了四张图(用于图片的轮播)和两个html文件(即下面的两个实例). 以下是正文: 实例一:通过两个按钮last.next控制显示上一张图片和下一张图片. ...
最新文章
- GDCM:gdcm::IPPSorter的测试程序
- [游戏引擎中文版]YU-RIS 4.5 最新中文支持版
- 解决SVN:E210007无法协商认证机制
- 分析android动画模块[转]
- 合同的不含税与税额怎么算
- HTML+Javascript制作拼图小游戏详解(一)
- 《Java程序员面试秘笈》—— 1.3 线程信息的获取和设置
- 大学生活没钱你会学习还是打工? C2 翻译有感
- 截取网页中的Flash
- cart决策树Matlab实现,CART决策树的理解及其实现
- IDEA插件系列(94):Pomodoro-tm插件——番茄钟计时
- c语言中变量属性,C语言学习笔记--C语言中变量的属性关键字
- JavaWeb之AjaxJSON
- ios 开发者证书付费三种类型区别
- 产品经理与项目经理-从PMP到NPDP
- (附源码)SSM学生社团管理系统JAVA计算机毕业设计项目
- error C1083:无法打开文件stddef.h或crtd bg.h
- java快速排序的时间复杂度_程序猿必备排序算法及其时间复杂度分析
- c语言求n个数最大最小值,c语言 如何求n个数的最大值 最小值
- 控制用计算机论文,计算机在自动控制技术实践中的应用分析
热门文章
- 基于php的二手车交易网站的设计与实现
- c语言break能与if用吗,break可以用于if吗
- “机器狗”作者藐视法律公开出售病毒
- 天涯论坛几位高手的帐号
- python花瓣飘零_小白请上车 | Python抓取花瓣网高清美图
- Premiere Pro 2022安装了speech to text本地语言包以后还是不能离线使用
- 计算机自动化技术论文,自动化技术_计算机技术87884.pdf
- PySpider 框架
- 职坐标mysql_mysql数据库迁移greenplum讲解
- 基于Java EE的中国象棋网上对战的设计与实现