两个问题:
1、控制viewpager时候,若想在同一界面显示出来2-3个item该怎样(效果如图所示)
2、控制viewpager显示多个item时候,item的视图被挤压,该怎么办?
解答:
1、要想实现图中效果,发现只要控制viewpager中的两个参数:
android:clipToPadding="false" android:paddingLeft="20dp" android:paddingRight="20dp"clipToPadding参数,网上是有讲解的;主要控制是paddingLeft和paddingRight,虽然为啥我也不太清楚;那么问题来了。。。padding的距离,该如何控制呢?开始是想写死一个合适的,后来发现,手机宽高比不同,适配会有问题,过宽手机可能会导致两边的卡片露不出来,还算勉强可以;但是过窄的手机就不行了,会导致每个item被padding严重挤压,然后变形,甚至显示不全。解决道路只剩下用代码根据手机屏幕的宽高来适配了2、适配思路:paddingLeft=0.5*(屏幕宽-图片宽)
最苦恼的莫过于代码中获取的长度,单位是啥?dp?px?还是啥?最后根据网上查到的资料,做一下总结:1)获取到本地图片尺寸(单位是px像素),从而得到图片比例:如图:536*798![]()
BitmapFactory.Options opts = new BitmapFactory.Options(); opts.inJustDecodeBounds = true; BitmapFactory.decodeResource(getResources(), R.drawable.bg_quiz_card_front, opts); opts.inSampleSize = 1; opts.inJustDecodeBounds = false; int width = opts.outWidth; int height = opts.outHeight;2)因为viewpager我们是固定了高度400dp,那么图片对应的imageview高度也会是400dp,那么对应的,我们根据根据图片的宽高比,就获得了图片在控件中的宽度3)接着,我们想获取屏幕的dp,从而得到差值int picWidth = (int) ((double) 400 * (double) ((double) width / (double) height));WindowManager wm = (WindowManager) getActivity().getSystemService(Context.WINDOW_SERVICE); DisplayMetrics dm = new DisplayMetrics(); wm.getDefaultDisplay().getMetrics(dm); int widthScreen = dm.widthPixels;// 屏幕宽度(像素) int heightScreen = dm.heightPixels; // 屏幕高度(像素) float density = dm.density;//屏幕密度(0.75 / 1.0 / 1.5) int densityDpi = dm.densityDpi;//屏幕密度dpi(120 / 160 / 240) //屏幕宽度算法:屏幕宽度(像素)/屏幕密度 int screenWidth = (int) (widthScreen / density);//屏幕宽度(dp) int screenHeight = (int) (heightScreen / density);//屏幕高度(dp)4)接着我们给viewpager赋值计算得后的padding距离padding=(屏幕宽度-图片宽度)/2这里需要注意:viewPager.setPadding(paddingLeft, paddingTop, paddingRight, paddingBottom);
这个方法的参数都是px我们需要把计算后的值换成px才行,float subWidth = screenWidth - picWidth; int paddingLeft = (int)(DimenUtils.dip2px(getActivity(), subWidth)*0.5); int paddingRight = paddingLeft, paddingTop = 0, paddingBottom = 0;public static int dip2px(Context context, float dpValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (dpValue * scale + 0.5f);}dip2px方法如上
最后调用viewPager.setPadding(paddingLeft, paddingTop, paddingRight, paddingBottom);
就完成适配啦