由于排版问题,本人博客园同名博文地址为:http://www.cnblogs.com/bill-technology/articles/3143667.html

    很多Android开发者在使用ViewPager控件的时候经常会遇到这样的问题:当我们在XML布局中对ViewPager的属性android:layout_height属性进行wrap_content设置之后,却发现并没有任何作用,Viewpager依然是铺满全屏的状态。

    我这里针对以下一个案例提供一下解决方案,并指出决解方案的利弊:

    该案例的实现效果如图:

    

    标蓝位置为Viewpager控件位置

    第一种:让Viewpager所在父控件占满屏幕剩余位置。

<?xml version="1.0" encoding="utf-8"?>                                                                                                                                                                                                                                                                                                                    
                 android:layout_above="@id/layout_module" >                                            
     注解:这种方法能够解决viewpager铺满全屏的问题,但是不方便的是由于搭载Android系统的手机数不胜数,屏幕分辨率也不尽相同,如果viewpager所填充的控件为Imageview用来显示一些广告图片,那么这些图片不能显示效果不能适合所有的机型,也就是说图片会扭曲或者变形。(前提是需求上明确图片必须置顶充满显示,两边不能留白)。   

    以下两张是保证图片不扭曲变形并完整显示所实现的效果(这里设置的ScaleType.CENTER_INSIDE),但是上面会有留白:

标蓝的地方为留白

    第二种:设置Viewpager或者其父控件的高度为固定值。

    效果图如下:

标蓝的地方为问题所在,也就是说标识切换的点与图片分离了。

    第三种方法:这种方法是我现在使用的方法,也是我所能想到的最完美的解决办法,这里与大家共同讨论下。这种方法的思路是这样的。

    从第二种方法我们可以得知,当我们指定了viewpager父控件的高度之后,viewpager就再像之前那样铺满全屏显示了。所以我想到的是动态的对viewpager的父控件的高度进行控制,而在布局中只是指定父控件的显示位置而已。但是会有人问了,如何动态的对父控件进行控制?而却父控件进行控制的值又从何而来呢?

    拿上面的那个案例来说,是这样的,上面的那个案例中的viewpager中的子控件是imageview,也就是说,这里的viewpager只是一个广告轮播的功能。我们只要得到所要显示图片宽高,在得到起缩放的比例便得到了imageview控件的宽高,也就是得到了viewpager父控件的高度。

    如果大家还不理解,请看代码:

    布局文件:

    

<?xml version="1.0" encoding="utf-8"?>                                                                                                                                                                                                                                                                                                                                                                                    
代码:

DisplayMetrics dm = new DisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(dm);int tempWidth = bm.getWidth();int tempHeight = bm.getHeight();img.setImageBitmap(bm);RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) layout.getLayoutParams();params.height = (int) (tempHeight * ((double) dm.widthPixels / (double) tempWidth));layout.setLayoutParams(params);
注解:这里的img指的是imageview,bm是得到的bitmap格式的图片,layout指的是viewpager的父控件。

最终的效果图也就是文章开始部分的效果图。

由于排版问题,本人博客园同名博文地址为:http://www.cnblogs.com/bill-technology/articles/3143667.html

   
   
   


更多相关文章

  1. Android(安卓)触摸事件的传递过程
  2. Android简易实战教程--第三十一话《自定义土司》
  3. 设置Android(安卓)Studio工程布局文件的默认布局
  4. Android——自定义控件(一)
  5. Android的Animation之LayoutAnimation使用方法(控件设置动画)
  6. Android(安卓)的 SimpleAdapter
  7. 线性布局分割
  8. Android画画板的制作方法
  9. Android(安卓)多屏幕适配

随机推荐

  1. android 根据EditText 内容,改变TextView
  2. Android BroadcastReceiver两种注册方式
  3. Android(安卓)Studio 打包apk,自动追加版
  4. Android中的category大全
  5. android一个简单的线程实例
  6. android第三天--AbsoluteLayout绝对布局
  7. Android控件之——输入框TextInputLayout
  8. 像素鸟(flapybird)的简单实现
  9. android面试题(1)
  10. [Android]获取网络连接状态