PhotoView结合ViewPager的简单使用
2017-11-07 16:19
441 查看
之前已经学过了ExpandableListView的基本用法,这次就在上面的基础上来结合PhotoView实现真正的浏览图片的做法。
使用PhotoView前需要添加依赖:
然后创建WatchPicturesActivity活动,它的布局是:
然后WatchPicturesActivity的具体代码是:
其中ViewPager的适配器为:
看一下具体的效果:
不过总觉得这样太过简陋了,接下来创建一个布局picture_detail.xml:
然后修改MyPagerAdapter中的instantiateItem方法:
看一下运行效果吧:
但是上面的按钮是一个很呆的设计,接下来把picture_detail.xml中按钮的布局放到activity_watch_pictures.xml中去,同时把上面instantiateItem方法中所有按钮的代码去掉,在WatchPicturesActivity.class中实例化按钮控件,然后添加如下代码:
看一下按钮的效果吧:
使用PhotoView前需要添加依赖:
compile 'com.github.chrisbanes.photoview:library:1.2.4'
然后创建WatchPicturesActivity活动,它的布局是:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v4.view.ViewPager android:id="@+id/vp_all_pictures" android:layout_width="match_parent" android:layout_height="match_parent"/> </RelativeLayout>
然后WatchPicturesActivity的具体代码是:
public class WatchPicturesActivity extends AppCompatActivity { private AllPictureBean.ShowapiResBodyBean.PagebeanBean.ContentlistBean picturesBean; private ViewPager vp_all_pictures; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_watch_pictures); picturesBean = (AllPictureBean.ShowapiResBodyBean.PagebeanBean.ContentlistBean) getIntent().getSerializableExtra("picturesBean"); initView(); } private void initView(){ vp_all_pictures = (ViewPager) findViewById(R.id.vp_all_pictures); vp_all_pictures.setAdapter(new MyPagerAdapter(WatchPicturesActivity.this, picturesBean)); } }
其中ViewPager的适配器为:
public class MyPagerAdapter extends PagerAdapter { private Context context; private AllPictureBean.ShowapiResBodyBean.PagebeanBean.ContentlistBean picturesBean; public MyPagerAdapter(Context context, AllPictureBean.ShowapiResBodyBean.PagebeanBean.ContentlistBean picturesBean) { this.context = context; this.picturesBean = picturesBean; } @Override public int getCount() { return picturesBean.getList().size(); } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public Object instantiateItem(ViewGroup container, int position) { AllPictureBean.ShowapiResBodyBean.PagebeanBean.ContentlistBean.ListBean pictureBean = picturesBean.getList().get(position); PhotoView imageView = new PhotoView(context); d601 Glide.with(context) .load(pictureBean.getMiddle()) //加载网络图片的地址 .diskCacheStrategy(DiskCacheStrategy.ALL) .skipMemoryCache(false) .error(R.drawable.default_pic) //没网时候加载这个 .into(imageView); container.addView(imageView); return imageView; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } }
看一下具体的效果:
不过总觉得这样太过简陋了,接下来创建一个布局picture_detail.xml:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:background="@android:color/black" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:orientation="horizontal" android:layout_centerHorizontal="true" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:id="@+id/tv_left_number" android:text="1/" android:textSize="20sp" android:textColor="@android:color/white" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <TextView android:id="@+id/tv_right_number" android:text="25" android:textSize="20sp" android:textColor="@android:color/white" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout> <uk.co.senab.photoview.PhotoView android:id="@+id/phothview" android:layout_width="match_parent" android:layout_height="match_parent"/> <Button android:id="@+id/change_pager_button" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:background="@android:color/transparent" android:text="下一页" android:textColor="@android:color/white" android:visibility="gone" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </RelativeLayout>
然后修改MyPagerAdapter中的instantiateItem方法:
@Override public Object instantiateItem(ViewGroup container, int position) { AllPictureBean.ShowapiResBodyBean.PagebeanBean.ContentlistBean.ListBean pictureBean = picturesBean.getList().get(position); View view = View.inflate(context, R.layout.picture_detail, null); PhotoView photoView = (PhotoView) view.findViewById(R.id.phothview); TextView tv_left_number = (TextView) view.findViewById(R.id.tv_left_number); TextView tv_right_number = (TextView) view.findViewById(R.id.tv_right_number); Button button = (Button) view.findViewById(R.id.change_pager_button); if (picturesBean.getList().size() > 1){ if (position == picturesBean.getList().size() - 1 ){ button.setText("下一组"); button.setVisibility(View.VISIBLE); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(context, "切换到下一组", Toast.LENGTH_SHORT).show(); } }); } else if (position == 0){ button.setText("上一组"); button.setVisibility(View.VISIBLE); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(context, "切换到上一组", Toast.LENGTH_SHORT).show(); } }); } else { button.setVisibility(View.GONE); } } int picPosition = position + 1; tv_left_number.setText("" + picPosition); tv_right_number.setText("/" + picturesBean.getList().size()); Glide.with(context) .load(pictureBean.getMiddle()) //加载网络图片的地址 .diskCacheStrategy(DiskCacheStrategy.ALL) .skipMemoryCache(false) .error(R.drawable.default_pic) //没网时候加载这个 .into(photoView); container.addView(view); return view; }
看一下运行效果吧:
但是上面的按钮是一个很呆的设计,接下来把picture_detail.xml中按钮的布局放到activity_watch_pictures.xml中去,同时把上面instantiateItem方法中所有按钮的代码去掉,在WatchPicturesActivity.class中实例化按钮控件,然后添加如下代码:
private Button leftButton;//在initView中去实例化 private Button rightButton; @Override protected void onCreate(Bundle savedInstanceState) { ... setClick(); } private void setClick(){ rightButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (beanPosition < dataList.size() - 1){ Toast.makeText(WatchPicturesActivity.this, "切换到下一组", Toast.LENGTH_SHORT).show(); AllPictureBean.ShowapiResBodyBean.PagebeanBean.ContentlistBean bean = dataList.get(beanPosition + 1); Intent intent = new Intent(WatchPicturesActivity.this, WatchPicturesActivity.class); Bundle bundle = new Bundle(); bundle.putSerializable("picturesBean", bean); bundle.putSerializable("dataList", (Serializable) dataList); intent.putExtras(bundle); intent.putExtra("beanPosition", beanPosition + 1); startActivity(intent); finish(); } else { Toast.makeText(WatchPicturesActivity.this, "最后一组咯", Toast.LENGTH_SHORT).show(); } } }); leftButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (beanPosition > 0){ Toast.makeText(WatchPicturesActivity.this, "切换到上一组", Toast.LENGTH_SHORT).show(); AllPictureBean.ShowapiResBodyBean.PagebeanBean.ContentlistBean bean = dataList.get(beanPosition - 1); Intent intent = new Intent(WatchPicturesActivity.this, WatchPicturesActivity.class); Bundle bundle = new Bundle(); bundle.putSerializable("picturesBean", bean); bundle.putSerializable("dataList", (Serializable) dataList); intent.putExtras(bundle); intent.putExtra("beanPosition", beanPosition - 1); WatchPicturesActivity activity = (WatchPicturesActivity) WatchPicturesActivity.this; activity.startActivity(intent); activity.finish(); } else { Toast.makeText(WatchPicturesActivity.this, "第一组啦", Toast.LENGTH_SHORT).show(); } } }); }
看一下按钮的效果吧:
相关文章推荐
- PhotoView的简单使用(在ViewPager里面的触摸处理)
- Android 关于ViewPager结合碎片Fragment的简单使用
- Android 使用ViewPager结合PhotoView开源组件实现网络图片在线浏览功能
- Android 使用ViewPager结合PhotoView开源组件实现网络图片在线浏览功能
- ViewPager+Fragment的结合使用,实现QQ界面的理解
- 最简单的ViewPager使用案例
- ViewPager+Fragment的结合使用,实现QQ界面的理解
- android控件篇:ViewPager+Fragment+GridView的使用(与AndroidQuery框架结合)
- ViewPager+Fragment的结合使用
- ActionBar与ViewPager结合使用
- ViewPager+Fragment的结合使用,实现QQ界面的理解
- viewpager的简单使用
- 开源项目PullToRefresh详解(四)——PullToRefreshListView和ViewPager的结合使用
- Android 开源框架ViewPageIndicator(标签指示器)结合ViewPager使用
- 【Android您问我讲】带左右滑动的选项卡 - ViewPager与Tabhost的结合使用
- ViewPager+Fragment的结合使用,实现QQ界面的理解
- ViewPager+Fragment的结合使用,实现QQ界面的理解
- ViewPager的简单使用
- ViewPager结合Activity的使用及父Activity中调用子Activity的方法
- ViewPager简单使用