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

在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);
}
网友评论