Skip to content

Commit 2c6472f

Browse files
author
李晨玮
committed
1、初步添加大图预览功能,后期会抽成Fragment承载
2、调整图片文件夹弹出框高度 3、更新README.md
1 parent 2f7772c commit 2c6472f

16 files changed

Lines changed: 215 additions & 16 deletions

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ implementation 'com.lcw.library:imagepicker:1.0.1'
2626
<activity
2727
android:name="com.lcw.library.imagepicker.activity.ImagePickerActivity"
2828
android:screenOrientation="portrait" />
29+
<activity
30+
android:name="com.lcw.library.imagepicker.activity.ImagePreActivity"
31+
android:screenOrientation="portrait" />
2932
...
3033
</application>
3134
@@ -118,6 +121,7 @@ public class GlideLoader implements ImageLoader {
118121
```
119122

120123

124+
121125
版本会持续迭代,未完待续。。。(欢迎Star,欢迎Fork)
122126

123127

app/src/main/AndroidManifest.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,11 @@
2626
android:name="com.lcw.library.imagepicker.activity.ImagePickerActivity"
2727
android:screenOrientation="portrait" />
2828

29+
<!--图片大图预览-->
30+
<activity
31+
android:name="com.lcw.library.imagepicker.activity.ImagePreActivity"
32+
android:screenOrientation="portrait" />
33+
2934

3035
<!-- Android 7.0 文件共享配置,必须配置 -->
3136
<provider

app/src/main/java/com/lcw/demo/imagepicker/GlideLoader.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,21 @@
1616
public class GlideLoader implements ImageLoader {
1717

1818
@Override
19-
public void loadImage(ImageView imageView, String imagePah) {
19+
public void loadImage(ImageView imageView, String imagePath) {
2020
//小图加载
2121
RequestOptions options = new RequestOptions()
2222
.centerCrop()
2323
.placeholder(R.mipmap.icon_image_default)
2424
.error(R.mipmap.icon_image_error);
25-
Glide.with(imageView.getContext()).load(imagePah).apply(options).into(imageView);
25+
Glide.with(imageView.getContext()).load(imagePath).apply(options).into(imageView);
2626
}
2727

2828
@Override
2929
public void loadPreImage(ImageView imageView, String imagePath) {
3030
//大图加载
31+
RequestOptions options = new RequestOptions()
32+
.error(R.mipmap.icon_image_error);
33+
Glide.with(imageView.getContext()).load(imagePath).apply(options).into(imageView);
3134

3235
}
3336

build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ allprojects {
2020
repositories {
2121
google()
2222
jcenter()
23+
maven { url "https://jitpack.io" }
2324
}
2425
}
2526

imagepicker/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,4 +41,5 @@ dependencies {
4141
implementation fileTree(include: ['*.jar'], dir: 'libs')
4242
implementation 'com.android.support:appcompat-v7:27.1.1'
4343
implementation 'com.android.support:recyclerview-v7:27.1.1'
44+
implementation 'com.github.chrisbanes:PhotoView:2.0.0'
4445
}

imagepicker/src/main/java/com/lcw/library/imagepicker/activity/ImagePickerActivity.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -325,8 +325,20 @@ private void setLightMode(int lightMode) {
325325
*/
326326
@Override
327327
public void onImageClick(View view, int position) {
328-
// TODO: 2018/8/25 进行大图预览
329-
onImageCheck(view, position);
328+
if (mImageFileList != null) {
329+
ArrayList<String> imagePathList = new ArrayList<>();
330+
for (int i = 0; i < mImageFileList.size(); i++) {
331+
imagePathList.add(mImageFileList.get(i).getImagePath());
332+
}
333+
Intent intent = new Intent(this, ImagePreActivity.class);
334+
if (isShowCamera) {
335+
intent.putExtra(ImagePreActivity.IMAGE_POSITION, position - 1);
336+
} else {
337+
intent.putExtra(ImagePreActivity.IMAGE_POSITION, position);
338+
}
339+
intent.putStringArrayListExtra(ImagePreActivity.IMAGE_LIST, imagePathList);
340+
startActivity(intent);
341+
}
330342
}
331343

332344
/**
@@ -440,7 +452,7 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
440452
//添加到选中集合
441453
SelectionManager.getInstance().addImageToSelectList(mFilePath);
442454

443-
List<String> list = new ArrayList<>(SelectionManager.getInstance().getSelectPaths());
455+
List<String> list = new ArrayList<>(SelectionManager.getInstance().getSelectPaths());
444456
Intent intent = new Intent();
445457
intent.putStringArrayListExtra(ImagePicker.EXTRA_SELECT_IMAGES, (ArrayList<String>) list);
446458
setResult(RESULT_OK, intent);
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
package com.lcw.library.imagepicker.activity;
2+
3+
import android.os.Bundle;
4+
import android.support.annotation.Nullable;
5+
import android.support.v4.view.ViewPager;
6+
import android.support.v7.app.AppCompatActivity;
7+
import android.view.View;
8+
import android.widget.TextView;
9+
10+
import com.lcw.library.imagepicker.R;
11+
import com.lcw.library.imagepicker.adapter.ImagePreViewAdapter;
12+
import com.lcw.library.imagepicker.view.HackyViewPager;
13+
14+
import java.util.List;
15+
16+
/**
17+
* 大图预览界面
18+
* Create by: chenWei.li
19+
* Date: 2018/10/3
20+
* Time: 下午11:32
21+
* Email: lichenwei.me@foxmail.com
22+
*/
23+
public class ImagePreActivity extends AppCompatActivity {
24+
25+
public static final String IMAGE_LIST = "imageList";
26+
public static final String IMAGE_POSITION = "imagePosition";
27+
private List<String> mImagePaths;
28+
private int mPosition = 0;
29+
30+
private TextView mTvTitle;
31+
private TextView mTvCommit;
32+
private HackyViewPager mViewPager;
33+
private ImagePreViewAdapter mImagePreViewAdapter;
34+
35+
@Override
36+
protected void onCreate(@Nullable Bundle savedInstanceState) {
37+
super.onCreate(savedInstanceState);
38+
setContentView(R.layout.activity_pre_image);
39+
40+
initView();
41+
initListener();
42+
getData();
43+
44+
}
45+
46+
47+
private void initView() {
48+
mTvTitle = findViewById(R.id.tv_actionBar_title);
49+
mTvCommit = findViewById(R.id.tv_actionBar_commit);
50+
mViewPager = findViewById(R.id.vp_main_preImage);
51+
52+
mTvCommit.setVisibility(View.GONE);
53+
}
54+
55+
56+
private void initListener() {
57+
58+
findViewById(R.id.iv_actionBar_back).setOnClickListener(new View.OnClickListener() {
59+
@Override
60+
public void onClick(View v) {
61+
finish();
62+
}
63+
});
64+
65+
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
66+
@Override
67+
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
68+
69+
}
70+
71+
@Override
72+
public void onPageSelected(int position) {
73+
mTvTitle.setText(String.format("%d/%d", position + 1, mImagePaths.size()));
74+
}
75+
76+
@Override
77+
public void onPageScrollStateChanged(int state) {
78+
79+
}
80+
});
81+
}
82+
83+
84+
private void getData() {
85+
mImagePaths = getIntent().getStringArrayListExtra(IMAGE_LIST);
86+
mPosition = getIntent().getIntExtra(IMAGE_POSITION, 0);
87+
mImagePreViewAdapter = new ImagePreViewAdapter(this, mImagePaths);
88+
mViewPager.setAdapter(mImagePreViewAdapter);
89+
mViewPager.setCurrentItem(mPosition);
90+
mTvTitle.setText(String.format("%d/%d", mPosition + 1, mImagePaths.size()));
91+
92+
}
93+
94+
}

imagepicker/src/main/java/com/lcw/library/imagepicker/adapter/ImagePickerAdapter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ public void onClick(View view) {
148148
imageHolder.mImageCheck.setOnClickListener(new View.OnClickListener() {
149149
@Override
150150
public void onClick(View view) {
151-
mOnItemClickListener.onImageClick(view, position);
151+
mOnItemClickListener.onImageCheck(view, position);
152152
}
153153
});
154154
}

imagepicker/src/main/java/com/lcw/library/imagepicker/adapter/ImagePreViewAdapter.java

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,18 @@
33
import android.content.Context;
44
import android.support.annotation.NonNull;
55
import android.support.v4.view.PagerAdapter;
6-
import android.support.v4.view.ViewPager;
76
import android.view.View;
87
import android.view.ViewGroup;
98
import android.widget.ImageView;
109

11-
import com.lcw.library.imagepicker.data.ImageFile;
10+
import com.github.chrisbanes.photoview.PhotoView;
11+
import com.github.chrisbanes.photoview.PhotoViewAttacher;
12+
import com.lcw.library.imagepicker.ImagePicker;
1213

1314
import java.util.List;
1415

1516
/**
17+
* 大图浏览适配器
1618
* Create by: chenWei.li
1719
* Date: 2018/8/30
1820
* Time: 上午12:57
@@ -21,16 +23,16 @@
2123
public class ImagePreViewAdapter extends PagerAdapter {
2224

2325
private Context mContext;
24-
private List<ImageFile> mImageFileList;
26+
private List<String> mImagePaths;
2527

26-
public ImagePreViewAdapter(Context context, List<ImageFile> imageFileList) {
28+
public ImagePreViewAdapter(Context context, List<String> imagePaths) {
2729
this.mContext = context;
28-
this.mImageFileList = imageFileList;
30+
this.mImagePaths = imagePaths;
2931
}
3032

3133
@Override
3234
public int getCount() {
33-
return mImageFileList == null ? 0 : mImageFileList.size();
35+
return mImagePaths == null ? 0 : mImagePaths.size();
3436
}
3537

3638
@Override
@@ -41,7 +43,20 @@ public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
4143
@NonNull
4244
@Override
4345
public Object instantiateItem(@NonNull ViewGroup container, int position) {
44-
ImageView imageView = new ImageView(mContext);
45-
return super.instantiateItem(container, position);
46+
PhotoView imageView = new PhotoView(mContext);
47+
imageView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
48+
//加载图片
49+
try {
50+
ImagePicker.getInstance().getImageLoader().loadPreImage(imageView, mImagePaths.get(position));
51+
} catch (Exception e) {
52+
e.printStackTrace();
53+
}
54+
container.addView(imageView);
55+
return imageView;
56+
}
57+
58+
@Override
59+
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
60+
container.removeView((View) object);
4661
}
4762
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package com.lcw.library.imagepicker.view;
2+
3+
import android.content.Context;
4+
import android.support.v4.view.ViewPager;
5+
import android.util.AttributeSet;
6+
import android.view.MotionEvent;
7+
8+
/**
9+
* Create by: chenWei.li
10+
* Date: 2018/10/7
11+
* Time: 下午5:29
12+
* Email: lichenwei.me@foxmail.com
13+
*/
14+
public class HackyViewPager extends ViewPager {
15+
16+
public HackyViewPager(Context context) {
17+
super(context);
18+
}
19+
20+
public HackyViewPager(Context context, AttributeSet attrs) {
21+
super(context, attrs);
22+
}
23+
24+
@Override
25+
public boolean onInterceptTouchEvent(MotionEvent ev) {
26+
try {
27+
return super.onInterceptTouchEvent(ev);
28+
} catch (IllegalArgumentException e) {
29+
return false;
30+
}
31+
}
32+
}

0 commit comments

Comments
 (0)