1.编写PhotoViewPager
public class PhotoViewPager extends ViewPager {
public PhotoViewPager(Context context) {
super(context);
}
public PhotoViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
try {
return super.onInterceptTouchEvent(ev);
} catch (IllegalArgumentException e) {
e.printStackTrace();
return false;
}
}
}
2.编写MyImageAdapter.class
public class MyImageAdapter extends PagerAdapter {
public static final String TAG = MyImageAdapter.class.getSimpleName();
private List<Bean> imageUrls;
private Context activity;
public MyImageAdapter(List<Bean> imageUrls, Context activity) {
this.imageUrls = imageUrls;
this.activity = activity;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
String url = imageUrls.get(position).getImage();
PhotoView photoView = new PhotoView(activity);
Glide.with(activity)
.load(url)
.placeholder(R.drawable.loader2)
.error(R.drawable.bb)
.into(photoView);
container.addView(photoView);
photoView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d(TAG, "onClick: ");
// activity.finish();
}
});
return photoView;
}
@Override
public int getCount() {
return imageUrls != null ? imageUrls.size() : 0;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
3.自己定义了弹出 对话框MyPicDialog
public class MyPicDialog extends Dialog {
private static final String TAG = "ooo";
private Context context;
private Button yes;//确定按钮
private Button no;//取消按钮
private ImageView img_show;
private PhotoViewPager photoViewPager;
private String yesStr, noStr;
private List<Bean> list_img;
private int img_position;
private int currentPosition;
private MyImageAdapter adapter;
private List<Bean> Urls=new ArrayList<>();
private float mPosX;
private float mPosY;
private float mCurrentPosX;
private float mCurrentPosY;
private onNoOnclickListener noOnclickListener;//取消按钮被点击了的监听器
private onYesOnclickListener yesOnclickListener;//确定按钮被点击了的监听器
/**
* 设置取消按钮的显示内容和监听
*
* @param str
* @param onNoOnclickListener
*/
public void setNoOnclickListener(String str, onNoOnclickListener onNoOnclickListener) {
if (str != null) {
noStr = str;
}
this.noOnclickListener = onNoOnclickListener;
}
/**
* 设置确定按钮的显示内容和监听
*
* @param str
* @param onYesOnclickListener
*/
public void setYesOnclickListener(String str, onYesOnclickListener onYesOnclickListener) {
if (str != null) {
yesStr = str;
}
this.yesOnclickListener = onYesOnclickListener;
}
public MyPicDialog(@NonNull Context context) {
super(context,R.style.MyPicDialog);
this.context=context;
}
@SuppressLint("ClickableViewAccessibility")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.picdialog);
//按空白处不能取消动画
// setCanceledOnTouchOutside(false);
// img_show=findViewById(R.id.img_show);
//初始化界面控件
initView();
//初始化界面数据
initData();
//初始化界面控件的事件
initEvent();
}
private void initView() {
yes=findViewById(R.id.btn_right);
no=findViewById(R.id.btn_left);
img_show=findViewById(R.id.img_show);
photoViewPager=findViewById(R.id.view_pager_photo);
}
private void initData() {
//如果设置按钮的文字
// Glide.with(context)
// .load(list_img.get(img_position).getImage())
// .placeholder(R.drawable.loader2)
// .error(R.drawable.bb)
// .into(img_show);
adapter = new MyImageAdapter(Urls, context);
photoViewPager.setAdapter(adapter);
photoViewPager.setCurrentItem(currentPosition, false);
no.setText(currentPosition + 1 + "/" + Urls.size());
photoViewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
super.onPageSelected(position);
Log.d(TAG, "onPageSelected: "+position);
currentPosition = position;
img_position=position;
no.setText(currentPosition + 1 + "/" + Urls.size());
}
});
}
/**
* 删除当前图片
* @param str
*/
public void deleteImg(String str){
FileUtils.deleteFile(str);
}
public void deleteImg(){
FileUtils.deleteFile(list_img.get(img_position).getImage());
}
/**
* 设置图片,初始化图片列表数据
* @param list 要加载的list集
* @param position 现在要显示的图片位置
*/
public void setImg(List<Bean> list,int position){
list_img=list;
Urls=list;
currentPosition=position;
img_position=position;
Log.d("opo", String.valueOf(img_position));
}
/**
* 设置当前显示图片
*
* 注:必须先初始化setImg
*/
public Bean setCurrentImg(){
Bean bean=new Bean();
bean=Urls.get(currentPosition);
if (FileUtils.deleteFile(Urls.get(currentPosition).getImage())==true)
{
Toast.makeText(context,"成功删除!"+Urls.get(currentPosition).getImage(),Toast.LENGTH_SHORT).show();
Log.d(TAG, "setCurrentImg: "+Urls.get(currentPosition).getImage());
}
else Toast.makeText(context,"成功失败!",Toast.LENGTH_SHORT).show();
Urls.remove(currentPosition);
adapter.notifyDataSetChanged();
// photoViewPager.setCurrentItem(currentPosition+1, false);
no.setText(currentPosition + "/" + Urls.size());
return bean;
}
public void change()
{
adapter.notifyDataSetChanged();
}
/**
* 初始化界面的确定和取消监听器
*/
private void initEvent() {
//设置确定按钮被点击后,向外界提供监听
yes.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (yesOnclickListener != null) {
yesOnclickListener.onYesClick();
}
}
});
//设置取消按钮被点击后,向外界提供监听
no.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (noOnclickListener != null) {
noOnclickListener.onNoClick();
}
}
});
}
/**
* 设置确定按钮和取消被点击的接口
*/
public interface onYesOnclickListener {
public void onYesClick();
}
public interface onNoOnclickListener {
public void onNoClick();
}
}
3.1. 布局文件picdialog.xml
调用自定义布局PhotoViewPager
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_gravity="center_vertical">
<Button
android:layout_gravity="center_vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btn_left"
android:background="#000000"
android:gravity="center"
android:textColor="#ffffff"
android:text="1/2"/>
<com.liudong.xjjscan.PhotoViewPager
android:id="@+id/view_pager_photo"
android:background="#000000"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_gravity="center_horizontal"
android:layout_weight="1"
>
</com.liudong.xjjscan.PhotoViewPager>
<ImageView
android:id="@+id/img_show"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="1"
android:src="@drawable/bb"
android:visibility="gone"/>
<Button
android:layout_gravity="center_vertical"
android:layout_width="match_parent"
android:layout_height="35dp"
android:id="@+id/btn_right"
android:background="#FF1493"
android:text="删除"
/>
</LinearLayout>
4.调用
点击列表框,弹出自定义对话框
listView_save.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, final int position, long id) {
position_s=position;
final String TAG="ooo";
myPicDialog = new MyPicDialog(WX.this);
myPicDialog.setImg(list_data,position);
myPicDialog.setYesOnclickListener("", new MyPicDialog.onYesOnclickListener() {
@Override
public void onYesClick() {
Bean a=new Bean();
a=myPicDialog.setCurrentImg();
Log.d(TAG, list_data.size()+"onYesClick: "+a.getImage());
list_data.remove(a);
myPicDialog.change();
myAdapter.notifyDataSetChanged();
}
});
myPicDialog.setNoOnclickListener("", new MyPicDialog.onNoOnclickListener() {
@Override
public void onNoClick() {
}
});
Log.d("show","show");
myPicDialog.show();
}
});
最后效果:不会弄gif
5.总结
编写PhotoViewPager-->Adapter-->对话框中调用PhotoView布局- MyPicDialog-->调用对话框显示图片
自己折腾的时候查资料弄的,写的乱,主要自己看
注:引入
implementation 'com.github.chrisbanes:PhotoView:2.1.3'
compile 'com.github.bumptech.glide:glide:3.8.0'
Glide: https://github.com/bumptech/glide/tree/3.0