美文网首页
android之ViewPager加载多张图片当于浏览器,图片可

android之ViewPager加载多张图片当于浏览器,图片可

作者: 破荒之恋 | 来源:发表于2019-02-23 14:20 被阅读24次

加载多张图片并可以左右切换或者添加张数和描述

效果如下:


微信图片_20190223140819.png

在gridview加载的图片随意选择一张图片跳转

  Intent intent = new Intent(getContext(), ViewPagerImageActivity.class);
            intent.putStringArrayListExtra("list", urls);
            intent.putStringArrayListExtra("values", values);
            intent.putExtra("position", position);
            startActivity(intent);

、viewpager_layout.xml 布局如下:

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:background="@color/black"
android:layout_height="match_parent">

<LinearLayout
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:gravity="center"
    android:layout_height="match_parent">
    <android.support.v4.view.ViewPager
        android:id="@+id/img_viewpager"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    </android.support.v4.view.ViewPager>
</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:orientation="horizontal"
    android:layout_alignParentBottom="true"
    android:paddingLeft="10dp"
    android:layout_height="wrap_content">

    <TextView
        android:id="@+id/photos_num"
        android:layout_width="80dp"
        android:text="1/1"
        android:padding="10dp"
        android:gravity="center_vertical"
        android:textColor="@color/white"
        android:layout_height="match_parent" />

    <TextView
        android:id="@+id/photos_notes"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:text=""
        android:gravity="center"
        android:padding="10dp"
        android:textColor="@color/white"
        android:layout_height="match_parent" />

    <TextView
        android:layout_width="80dp"
        android:padding="10dp"
        android:textColor="@color/white"
        android:layout_height="match_parent" />
</LinearLayout>

<FrameLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
    <ImageView
        android:id="@+id/appraise_back"
        android:layout_width="20dp"
        android:layout_height="20dp"
        android:layout_marginLeft="15dp"
        android:layout_marginTop="30dp"
        android:src="@mipmap/back_gray" />
</FrameLayout>

</RelativeLayout>

完整页面代码如下:

  public class ViewPagerImageActivity extends BaseActivity {


ViewPager viewPager;
@BindView(R.id.photos_notes)
TextView photosNotes;
@BindView(R.id.photos_num)
TextView photosNum;
@BindView(R.id.appraise_back)
ImageView appraiseBack;


ImageView[] mImageViews;

private ArrayList<String> listPhotos;
private ArrayList<String> listValues;
private int selectPosition;

private static final String TAG = "ViewPagerImageActivity";
private PagerAdapter adapter;

@Override
public int getLayoutId() {
    return R.layout.viewpager_layout;
}

@Override
public void initView() {


    appraiseBack.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            MyActivityManager.getInstance().removeActivity(ViewPagerImageActivity.this);
        }
    });
    Intent intent = getIntent();
    if (intent != null) {
        listPhotos = intent.getStringArrayListExtra("list");
        listValues = intent.getStringArrayListExtra("values");
        selectPosition = intent.getIntExtra("position",0);
        //value = intent.getStringExtra("value");


        LogHelper.d(TAG,"---listPhotos---"+listPhotos.size());
        LogHelper.d(TAG,"-----selectPosition------"+selectPosition);

        for (int i = 0; i < listPhotos.size(); i++) {
            LogHelper.d(TAG,"---listPhotos---"+listPhotos.get(i));
            LogHelper.d(TAG,"---listValues---"+listValues.get(i));
        }

        mImageViews = new ImageView[listPhotos.size()];
        viewPager = (ViewPager) findViewById(R.id.img_viewpager);

        photosNum.setText(selectPosition+1+"/"+listPhotos.size());
        photosNotes.setText(listValues.get(selectPosition));
        viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
               // LogHelper.d(TAG,"-----selectPosition------"+position);
            }

            @Override
            public void onPageSelected(int position) {


                LogHelper.d(TAG,"-----selectPosition------"+selectPosition);
                selectPosition=position;
                LogHelper.d(TAG,"-----position------"+position);
                LogHelper.d(TAG,"-----selectPosition------"+selectPosition);
                photosNum.setText(selectPosition+1+"/"+listPhotos.size());
                photosNotes.setText(listValues.get(selectPosition));

            }
            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });


        adapter = new PagerAdapter() {
            @Override
            public Object instantiateItem(ViewGroup container, int position) {
                //可以使用其他的ImageView 控件
                ImageView tounChImageView = new ImageView(ViewPagerImageActivity.this);
                mImageViews[position] = tounChImageView;
                LogHelper.d(TAG,"-----selectPosition------"+selectPosition);
                LogHelper.d(TAG,"-----listPhotos.get(position)------"+listPhotos.get(position));
                try {
                    ImageLoader.getInstance().displayImage(listPhotos.get(position),tounChImageView);
                } catch (Exception e) {}

                container.addView(tounChImageView, LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);

                //单击返回
                tounChImageView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        finish();
                    }
                });
                return tounChImageView;
            }

            @Override
            public int getCount() {
                return listPhotos.size();
            }

            @Override
            public void destroyItem(ViewGroup container, int position, Object object) {
                container.removeView(mImageViews[position]);
            }

            @Override
            public boolean isViewFromObject(View arg0, Object arg1) {
                return arg0 == arg1;
            }
        };


        viewPager.setAdapter(adapter);

        setDefaultItem(selectPosition);

    } else {
        ToastUtil.showS(this, "图片损坏哦");
        return;
    }
}


private void setDefaultItem(int position){
    //我这里mViewpager是viewpager子类的实例。如果你是viewpager的实例,也可以这么干。
    try {
        Class c = Class.forName("android.support.v4.view.ViewPager");
        Field field =c.getDeclaredField("mCurItem");
        field.setAccessible(true);
        field.setInt(viewPager, position);
    } catch (Exception e) {
        e.printStackTrace();
    }

    adapter.notifyDataSetChanged();

    viewPager.setCurrentItem(position);
}

}

当然,这里面用了注释第三方 butterknife 和加载图片的ImageLoader这个就不讲了

在ViewPager设置Adapter之后执行这个方法,setDefaultItem(position);可以指定跳转到ViewPager的第几页

  private void setDefaultItem(int position){
//我这里mViewpager是viewpager子类的实例。如果你是viewpager的实例,也可以这么干。
try {
    Class c = Class.forName("android.support.v4.view.ViewPager");
    Field field =c.getDeclaredField("mCurItem");
    field.setAccessible(true);
    field.setInt(viewPager, position);
} catch (Exception e) {
    e.printStackTrace();
}

adapter.notifyDataSetChanged();

viewPager.setCurrentItem(position);

}

相关文章

网友评论

      本文标题:android之ViewPager加载多张图片当于浏览器,图片可

      本文链接:https://www.haomeiwen.com/subject/xscpyqtx.html