dialogfragmentを使用して複数の画像を表示する

10696 ワード

レイアウトはdatabindingを使用して画像をロードglideを使用してネットワーク権限を忘れないでください:
<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