为什么我的ViewPager一行只能显示一张图片啊

logohoo 2015-05-20 11:37:11
按照http://www.cnblogs.com/android100/p/Android-ViewPager-scroll-pic.html
的说明,屏幕一行放一个ViewPager,但是屏幕一行只能显示ViewPager的一个子视图,就是只是显示一张图片,一个子视图放一张图片。

如何实现屏幕一行的ViewPager可以显示多张图片,等同于Gallery啊,我按照http://www.cnblogs.com/android100/p/Android-ViewPager-scroll-pic.html说明还是不行。


我现在的效果是,一行一个ViewPager只是显示一张视图图片,图片被宽拉伸了全屏。
...全文
241 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿璐小soso 2015-12-03
  • 打赏
  • 举报
回复
请问楼楼解决了么,我也遇到了这个问题。。。
logohoo 2015-05-21
  • 打赏
  • 举报
回复
package com.example.viewpagertext; import android.app.Activity; import android.os.Bundle; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; /** * ViewPager实现画廊效果 * * @author zhaoxinghai 2013/10/16 */ public class MianActivity extends Activity { private static int TOTAL_COUNT = 5; private LinearLayout viewPagerContainer; private ViewPager viewPager; private TextView tvTitle; private int[] imageIDs; private ImageView[] mImageViews; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.item1); imageIDs = new int[] { R.drawable.beautiful_001, R.drawable.beautiful_002, R.drawable.beautiful_003, R.drawable.beautiful_004, R.drawable.beautiful_005, R.drawable.beautiful_006, R.drawable.beautiful_007, R.drawable.beautiful_008/*, R.drawable.beautiful_009, R.drawable.beautiful_010, R.drawable.beautiful_011, R.drawable.beautiful_012, R.drawable.beautiful_013*/ }; //将图片装载到数组中 mImageViews = new ImageView[imageIDs.length]; for(int i=0; i<mImageViews.length; i++){ ImageView imageView = new ImageView(this); mImageViews[i] = imageView; imageView.setBackgroundResource(imageIDs[i]); } tvTitle = (TextView) findViewById(R.id.title); viewPager = (ViewPager)findViewById(R.id.view_pager); viewPagerContainer = (LinearLayout)findViewById(R.id.pager_layout); // int height=ScreenUtil.getScreenHeight(this); int width=ScreenUtil.getScreenWidth(this); int left=viewPagerContainer.getLeft(); // int right=viewPagerContainer.getRight(); viewPager.setPageMargin(20); int pageWidth=(width- viewPager.getPageMargin()*3-left*2)/3; LinearLayout.LayoutParams viewPagerPara=new LinearLayout.LayoutParams(pageWidth,pageWidth*2); viewPager.setLayoutParams(viewPagerPara); viewPager.setAdapter(new MyPagerAdapter()); // to cache all page, or we will see the right item delayed viewPager.setOffscreenPageLimit(TOTAL_COUNT); // MyOnPageChangeListener myOnPageChangeListener = new MyOnPageChangeListener(); viewPager.setOnPageChangeListener(new MyOnPageChangeListener()); viewPagerContainer.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { // dispatch the events to the ViewPager, to solve the problem that we can swipe only the middle view. return viewPager.dispatchTouchEvent(event); } }); } /** * this is a example fragment, just a imageview, u can replace it with your needs * * @author Trinea 2013-04-03 */ class MyPagerAdapter extends PagerAdapter { @Override public int getCount() { // return Integer.MAX_VALUE; //循环滑动 return imageIDs.length; // return TOTAL_COUNT; } @Override public boolean isViewFromObject(View view, Object object) { return (view == object); } @Override public Object instantiateItem(ViewGroup container, int position) { System.out.println("pos:" + position); ((ViewPager)container).addView(mImageViews[position % mImageViews.length], 0); return mImageViews[position % mImageViews.length]; /* System.out.println("pos:" + position); ImageView imageView = new ImageView(MianActivity.this); imageView.setImageResource(R.drawable.tmp_image1 + position); ImageView imageView1 = new ImageView(MianActivity.this); imageView1.setImageResource(R.drawable.tmp_image2 + position); ImageView imageView2 = new ImageView(MianActivity.this); imageView2.setImageResource(R.drawable.tmp_image3 + position); ImageView imageView3 = new ImageView(MianActivity.this); imageView3.setImageResource(R.drawable.tmp_image4 + position); ImageView imageView4 = new ImageView(MianActivity.this); imageView4.setImageResource(R.drawable.tmp_image5 + position); ((ViewPager)container).addView(imageView, position); ((ViewPager)container).addView(imageView1, position); ((ViewPager)container).addView(imageView2, position); ((ViewPager)container).addView(imageView3, position); ((ViewPager)container).addView(imageView4, position); return imageView;*/ } @Override public void destroyItem(ViewGroup container, int position, Object object) { ((ViewPager)container).removeView((ImageView)object); } } public class MyOnPageChangeListener implements OnPageChangeListener { @Override public void onPageSelected(int position) { tvTitle.setText("position = "+position); } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { // 刷新布局 if (viewPagerContainer != null) { viewPagerContainer.invalidate(); } } @Override public void onPageScrollStateChanged(int arg0) { } } } package com.example.viewpagertext; import android.content.Context; import android.view.View; public final class ScreenUtil { /** * 屏幕宽度 * * @param context * @return */ public static int getScreenWidth(Context context) { return context.getResources().getDisplayMetrics().widthPixels; } /** * 屏幕高度 * * @param context * @return */ public static int getScreenHeight(Context context) { return context.getResources().getDisplayMetrics().heightPixels; } /** * 在onCreate()获得view的高度 * * @param view * 控件 * @return 高度 */ public static int getViewHeight(View view) { int w = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); int h = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); view.measure(w, h); return view.getMeasuredHeight(); } /** * 在onCreate()获得view的宽度 * * @param view * 控件 * @return 宽度 */ public static int getViewWidth(View view) { int w = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); int h = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); view.measure(w, h); return view.getMeasuredWidth(); } }
logohoo 2015-05-21
  • 打赏
  • 举报
回复
真心问一下,上面代码: LinearLayout.LayoutParams viewPagerPara=new LinearLayout.LayoutParams(pageWidth,pageWidth*2); pageWidth 是三个显示图片的宽,还是一个显示图片的宽;
sagittarius1988 2015-05-21
  • 打赏
  • 举报
回复
估计是你adapter的问题
寒烟凝绿 2015-05-21
  • 打赏
  • 举报
回复
不贴代码 谁知道问题在哪啊
logohoo 2015-05-21
  • 打赏
  • 举报
回复
我设置了 1、viewpager的父控件设置为clipChildren="false"--------限制子控件大小:不限制 2、viewpager的父控件设置为layerType="software"----------软件加速(硬件加速3.0后clipChildren会失效) 3、viewpager设置layout_marginLeft和layout_marginRight-----------不设置你可以试试效果 4、viewpager设置setOffscreenPageLimit-------允许缓存多少页,不设置的话左右两页是空的,不会显示左右两页的边缘。一般设置为>=3 还是不行啊。
logohoo 2015-05-21
  • 打赏
  • 举报
回复
求求救命啊,为什么啊?帮帮忙啊。版主啊,说说话儿啊。
logohoo 2015-05-21
  • 打赏
  • 举报
回复
晕倒,代码贴出来还不是一样,一点建议都没有啊。 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/pager_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:layout_marginRight="20dp" android:background="#FFB6C1" android:layerType="software" android:clipChildren="false" android:orientation="vertical" > <android.support.v4.view.ViewPager android:id="@+id/view_pager" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#7FFFD4" android:clipChildren="false" /> <TextView android:id="@+id/title" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:gravity="center_horizontal" android:text="baidu" android:textSize="18sp" /> </LinearLayout>

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧