compile ‘com.bm.photoview:library:1.4.1’
compile ‘xiaofei.library:android-data-storage:1.3.0’
在layout下创建activity_photo_browser.xml
<FrameLayout xmlns:android=“http://schemas.android.com/apk/res/android”
xmlns:tools=“http://schemas.android.com/tools”
android:layout_width=“match_parent”
android:layout_height=“match_parent”
android:background=“@color/black”>
<android.support.v4.view.ViewPager
android:id=“@+id/pager”
android:layout_width=“match_parent”
android:layout_height=“match_parent” />
<ImageView
android:id=“@+id/crossIv”
android:layout_width=“24dp”
android:layout_height=“24dp”
android:layout_marginLeft=“@dimen/activity_horizontal_margin”
android:layout_marginTop=“@dimen/activity_horizontal_margin”
android:visibility=“gone”
android:src=“@drawable/rp_closed_icon” />
<TextView
android:id=“@+id/photoOrderTv”
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:layout_gravity=“bottom|left”
android:layout_margin=“@dimen/activity_horizontal_margin”
android:padding=“10dp”
android:textSize=“14sp”
android:textColor=“@color/white” />
<TextView
android:id=“@+id/downloadOriginal”
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:layout_gravity=“bottom|center”
android:visibility=“gone”
android:layout_margin=“@dimen/activity_horizontal_margin”
android:padding=“10dp”
android:textSize=“10sp”
android:text=“下载原图”
android:textColor=“@color/white”
/>
<TextView
android:id=“@+id/saveTv”
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:layout_gravity=“bottom|right”
android:layout_margin=“@dimen/activity_horizontal_margin”
android:padding=“10dp”
android:textSize=“14sp”
android:visibility=“visible”
android:text=“保存”
android:textColor=“@color/white” />
<ImageView
android:layout_width=“32dp”
android:layout_height=“32dp”
android:src=“@drawable/loading”
android:layout_gravity=“center”
android:visibility=“gone”
android:id=“@+id/centerIv”/>
创建浏览图片的activity
/**
-
ProjectName: zhenhua
-
Author: lgq
-
Date: 2017/12/19 0019 15:29
*/
public class PhotoBrowserActivity extends Activity implements View.OnClickListener {
private ImageView crossIv;
private ViewPager mPager;
private ImageView centerIv;
private TextView photoOrderTv;
private TextView downloadOriginalTv;
private TextView saveTv;
private String curImageUrl = “”;
private String[] imageUrls = new String[]{};
private int curPosition = -1;
private int[] initialedPositions = null;
private ObjectAnimator objectAnimator;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_photo_browser);
String urls = getIntent().getStringExtra(“imageUrls”);
JSONArray urlsJsonArray = JSONArray.parseArray(urls);
imageUrls = urlsJsonArray.toArray(new String[urlsJsonArray.size()]);
for (int i = 0; i < imageUrls.length; i++) {
imageUrls[i] = getOriginalUrl(imageUrls[i]);
}
curImageUrl = getIntent().getStringExtra(“curImageUrl”);
initialedPositions = new int[imageUrls.length];
initInitialedPositions();
photoOrderTv = (TextView) findViewById(R.id.photoOrderTv);
downloadOriginalTv = (TextView) findViewById(R.id.downloadOriginal);
downloadOriginalTv.setOnClickListener(this);
saveTv = (TextView) findViewById(R.id.saveTv);
saveTv.setOnClickListener(this);
centerIv = (ImageView) findViewById(R.id.centerIv);
crossIv = (ImageView) findViewById(R.id.crossIv);
crossIv.setOnClickListener(this);
mPager = (ViewPager) findViewById(R.id.pager);
mPager.setPageMargin((int) (getResources().getDisplayMetrics().density * 15));
mPager.setAdapter(new PagerAdapter() {
@Override
public int getCount() {
return imageUrls.length;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public Object instantiateItem(ViewGroup container, final int position) {
if (imageUrls[position] != null && !“”.equals(imageUrls[position])) {
final PhotoView view = new PhotoView(PhotoBrowserActivity.this);
view.enable();
view.setScaleType(ImageView.ScaleType.FIT_CENTER);
Glide.with(PhotoBrowserActivity.this).load(imageUrls[position]).override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL).fitCenter().crossFade().listener(new RequestListener<String, GlideDrawable>() {
@Override
public boolean onException(Exception e, String model, Target target, boolean isFirstResource) {
if (position == curPosition) {
hideLoadingAnimation();
}
showErrorLoading();
return false;
}
@Override
public boolean onResourceReady(GlideDrawable resource, String model, Target target, boolean isFromMemoryCache, boolean isFirstResource) {
occupyOnePosition(position);
if (position == curPosition) {
hideLoadingAnimation();
}
return false;
}
}).into(view);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
view.setTag(position);
container.addView(view);
return view;
}
return null;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
releaseOnePosition(position);
container.removeView((View) object);
}
});
curPosition = returnClickedPosition() == -1 ? 0 : returnClickedPosition();
mPager.setCurrentItem(curPosition);
// mPager.setTag(curPosition);
if (initialedPositions[curPosition] != curPosition) {//如果当前页面未加载完毕,则显示加载动画,反之相反;
showLoadingAnimation();
}
photoOrderTv.setText((curPosition + 1) + “/” + imageUrls.length);//设置页面的编号
mPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
if (initialedPositions[position] != position) {//如果当前页面未加载完毕,则显示加载动画,反之相反;
showLoadingAnimation();
} else {
hideLoadingAnimation();
}
curPosition = position;
curImageUrl = imageUrls[position];
photoOrderTv.setText((position + 1) + “/” + imageUrls.length);//设置页面的编号
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
private int returnClickedPosition() {
if (imageUrls == null || curImageUrl == null) {
return -1;
}
for (int i = 0; i < imageUrls.length; i++) {
if (getOriginalUrl(curImageUrl).equals(imageUrls[i])) {
return i;
}
}
return -1;
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.crossIv:
finish();
break;
case R.id.saveTv:
// savePhotoToLocal();
saveOriginalPhotoToLocal(getOriginalUrl(curImageUrl));
break;
case R.id.downloadOriginal:
saveOriginalPhotoToLocal(getOriginalUrl(curImageUrl));
break;
default:
break;
}
}
private void showLoadingAnimation() {
centerIv.setVisibility(View.VISIBLE);
centerIv.setImageResource(R.drawable.loading);
if (objectAnimator == null) {
objectAnimator = ObjectAnimator.ofFloat(centerIv, “rotation”, 0f, 360f);
objectAnimator.setDuration(2000);
objectAnimator.setRepeatCount(ValueAnimator.INFINITE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
objectAnimator.setAutoCancel(true);
}
}
objectAnimator.start();
}
private void hideLoadingAnimation() {
releaseResource();
centerIv.setVisibility(View.GONE);
}
private void showErrorLoading() {
releaseResource();
centerIv.setRotation(0f);
centerIv.setVisibility(View.GONE);
centerIv.setImageResource(R.drawable.list_img);
}
private void releaseResource() {
if (objectAnimator != null) {
objectAnimator.cancel();
}
if (centerIv.getAnimation() != null) {
centerIv.getAnimation().cancel();
}
}
private void occupyOnePosition(int position) {
initialedPositions[position] = position;
}
private void releaseOnePosition(int position) {
initialedPositions[position] = -1;
}
private void initInitialedPositions() {
for (int i = 0; i < initialedPositions.length; i++) {
initialedPositions[i] = -1;
}
最后
有任何问题,欢迎广大网友一起来交流,分享高阶Android学习视频资料和面试资料包~
偷偷说一句:群里高手如云,欢迎大家加群和大佬们一起交流讨论啊!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
seOnePosition(int position) {
initialedPositions[position] = -1;
}
private void initInitialedPositions() {
for (int i = 0; i < initialedPositions.length; i++) {
initialedPositions[i] = -1;
}
最后
有任何问题,欢迎广大网友一起来交流,分享高阶Android学习视频资料和面试资料包~
偷偷说一句:群里高手如云,欢迎大家加群和大佬们一起交流讨论啊!
[外链图片转存中…(img-QxU6CJkE-1714297973770)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!