ViewPager 中设置图片大小不起作用

来源:互联网 发布:js写插件 编辑:程序博客网 时间:2024/05/16 07:51

    需求是一个手动图片滑动效果,但是图片不填充整个屏幕,同时滑动图片的时候,图片是从左右的最边上滑过来的。于是想到viewpger:将viewpager填充整个屏幕,但是将图片设置成想要的大小,这样效果就实现了。于是在代码中设置了viewpager的子元素imageview。


ImageView iv = new ImageView(this);
iv.setScaleType(ImageView.ScaleType.FIT_XY);
LinearLayout.LayoutParams iv_params = new LinearLayout.LayoutParams(1600, 800);

同时将iv添加到viewpager的图片集合中,运行后发现图片还是显示原始大小,根本不变化。

原因:imageview创建时没有指定父布局,因为控件参数的大小其实是父布局的。所以————

private LinearLayout buildImageView(int id) {
LinearLayout ll = new LinearLayout(GuideActivity.this);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);

ll.setLayoutParams(params);
ll.setGravity(Gravity.CENTER);
ImageView iv = new ImageView(this);
iv.setScaleType(ImageView.ScaleType.FIT_XY);
LinearLayout.LayoutParams iv_params = new LinearLayout.LayoutParams(1600, 800);
params.gravity = Gravity.CENTER_VERTICAL;
Log.i("width--height", "width = " + params.width + "---" + "height = " + params.height);
iv.setLayoutParams(iv_params);
iv.setImageResource(id);
ll.addView(iv);

return ll;
}

由于LinearLayout是viewgroup的子类,即是view的子类,所以添加到viewpager中是没有问题的。

-----------------------------------

运行后发现图片是按照正常设置大小来显示了。终于OK!

ps:还可以在xml中定义一个imageview,同样要有父布局,但是,在PagerAdapter的public Object instantiateItem(View container, int position) {}中,参数view要改成viewgroup,因为inflate方法加载布局的第二个参数是一个viewgroup啦。这种方式也同样有效。

送给遇到同样问题的小伙伴们。

0 0
原创粉丝点击