dialogfragmentを使用して複数の画像を表示する
レイアウトはdatabindingを使用して画像をロードglideを使用してネットワーク権限を忘れないでください:
効果図:
プライマリコード:
PreviewImageDialog.java
アダプタファイル:
アダプタで画像のurlに基づいてImageviewオブジェクトを生成し、viewpagerに追加し、glideを使用して画像をロードします.
PreviewAdapter.java
レイアウトファイル:
使用方法:
demoダウンロード:
dialogfragment複数の画像をロード-ダウンロードチャンネル-CSDN.NEThttp://download.csdn.net/detail/baidu_31093133/9629184
<uses-permission android:name="android.permission.INTERNET"/>
効果図:
プライマリコード:
PreviewImageDialog.java
/** * */
public class PreviewImageDialog extends DialogFragment {
private List<String> previewPics;
private PreviewBinding binding;
private PreviewAdapter adapter;
private static final String PIC_PATH = "pic_path";
public static PreviewImageDialog newInstance(ArrayList<String> list) {
PreviewImageDialog previewDialog = new PreviewImageDialog();
Bundle args = new Bundle();
args.putStringArrayList(PIC_PATH, list);
previewDialog.setArguments(args);
return previewDialog;
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(0x4c000000));
binding = DataBindingUtil.inflate(inflater, R.layout.activity_preview_image, container, false);
initView();
return binding.getRoot();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
previewPics = new ArrayList<String>();
previewPics = getArguments().getStringArrayList(PIC_PATH);
LogUtil.HDLog(" : " + previewPics.size());
}
public void initView() {
adapter = new PreviewAdapter(previewPics, getActivity());
binding.previewPager.setAdapter(adapter);
binding.previewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
binding.previewPager.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dismiss();
}
});
}
@Override
public void onStart() {
super.onStart();
DisplayMetrics dm = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm);
getDialog().getWindow().setLayout(dm.widthPixels, WindowManager.LayoutParams.MATCH_PARENT);
}
}
アダプタファイル:
アダプタで画像のurlに基づいてImageviewオブジェクトを生成し、viewpagerに追加し、glideを使用して画像をロードします.
PreviewAdapter.java
/** * Created by ${} on 2016/9/8. * <p/> * pagerAdapter */
public class PreviewAdapter extends PagerAdapter {
private List<String> list;
private Context context;
public PreviewAdapter(List<String> list, Context context) {
this.list = list;
this.list = new ArrayList<>();
this.list.addAll(list);
this.list.remove(0);//
this.context = context;
}
@Override
public int getCount() {
return list.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
ImageView imageView = new ImageView(context);
Glide.with(context).load(list.get(position)).diskCacheStrategy(DiskCacheStrategy.NONE).into(imageView);
container.addView(imageView);
return imageView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
}
レイアウトファイル:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data class="PreviewBinding">
</data>
<RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent">
<android.support.v4.view.ViewPager android:id="@+id/preview_pager" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_centerInParent="true" android:background="#66000000">
</android.support.v4.view.ViewPager>
</RelativeLayout>
</layout>
使用方法:
/** * */
private void preBigImage() {
FragmentTransaction ft = getFragmentManager().beginTransaction();
Fragment prev = getFragmentManager().findFragmentByTag(Constant.PREVIEW_PICTURE_DIALOG_FRAMENTS);
if (prev != null) {
ft.remove(prev);
}
ft.addToBackStack(null);
// PreviewImageDialog, url
//private ArrayList<String> storyImages;
PreviewImageDialog previewDialog = new PreviewImageDialog().newInstance(storyImages);
// show dialogfragment
previewDialog.show(ft, Constant.PREVIEW_PICTURE_DIALOG_FRAMENTS);
}
demoダウンロード:
dialogfragment複数の画像をロード-ダウンロードチャンネル-CSDN.NEThttp://download.csdn.net/detail/baidu_31093133/9629184