0

这是我的第一篇文章,所以请多多包涵。我正在尝试从片段类内部设置墙纸。我正在使用 UIL,我想使用的位图是从 URI 加载的,并且位于页面适配器类中。

我不知道如何将位图传递给壁纸管理器。

编码:

public class ImagePagerFragment extends BaseFragment {

public static final int INDEX = 2;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    menu.clear();
    inflater.inflate(R.menu.fr_imagepager_menu, menu);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fr_image_pager, container, false);
    ViewPager pager = (ViewPager) rootView.findViewById(R.id.pager);
    pager.setAdapter(new ImageAdapter(getActivity()));
    pager.setCurrentItem(getArguments().getInt(Constants.Extra.IMAGE_POSITION, 0));
    return rootView;
}

private static class ImageAdapter extends PagerAdapter {

    private static final String[] IMAGE_URLS = Constants.IMAGES;

    private LayoutInflater inflater;
    private DisplayImageOptions options;

    ImageAdapter(Context context) {
        inflater = LayoutInflater.from(context);

        options = new DisplayImageOptions.Builder()
                .showImageForEmptyUri(R.drawable.ic_empty)
                .showImageOnFail(R.drawable.ic_error)
                .resetViewBeforeLoading(true)
                .cacheOnDisk(true)
                .imageScaleType(ImageScaleType.EXACTLY)
                .bitmapConfig(Bitmap.Config.RGB_565)
                .considerExifParams(true)
                .displayer(new FadeInBitmapDisplayer(300))
                .build();
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView((View) object);
    }

    @Override
    public int getCount() {
        return IMAGE_URLS.length;
    }

    @Override
    public Object instantiateItem(ViewGroup view, int position) {
        View imageLayout = inflater.inflate(R.layout.item_pager_image, view, false);
        assert imageLayout != null;
        TouchImageView imageView = (TouchImageView) imageLayout.findViewById(R.id.image);
        final ProgressBar spinner = (ProgressBar) imageLayout.findViewById(R.id.loading);



        ImageLoader.getInstance().loadImage(IMAGE_URLS[position], new SimpleImageLoadingListener() {
            @Override
            public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
                // Do whatever you want with Bitmap
                loadedImage = ????


            }
        });



        ImageLoader.getInstance().displayImage(IMAGE_URLS[position], imageView, options, new SimpleImageLoadingListener() {
            @Override
            public void onLoadingStarted(String imageUri, View view) {
                spinner.setVisibility(View.VISIBLE);
                view.setVisibility(View.GONE);
            }

            @Override
            public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
                String message = null;
                switch (failReason.getType()) {
                    case IO_ERROR:
                        message = "Input/Output error";
                        break;
                    case DECODING_ERROR:
                        message = "Image can't be decoded";
                        break;
                    case NETWORK_DENIED:
                        message = "Downloads are denied";
                        break;
                    case OUT_OF_MEMORY:
                        message = "Out Of Memory error";
                        break;
                    case UNKNOWN:
                        message = "Unknown error";
                        break;
                }
                Toast.makeText(view.getContext(), message, Toast.LENGTH_SHORT).show();

                spinner.setVisibility(View.GONE);
            }

            @Override
            public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
                spinner.setVisibility(View.GONE);
                view.setVisibility(View.VISIBLE);
            }
        });


        view.addView(imageLayout, 0);
        return imageLayout;


    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view.equals(object);
    }

    @Override
    public void restoreState(Parcelable state, ClassLoader loader) {
    }

    @Override
    public Parcelable saveState() {
        return null;
    }
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.fr_item_wallpaper:
            Log.d("wallpaper", "selected");
            WallpaperManager mywallpaperManager = WallpaperManager.getInstance(getActivity().getApplicationContext());
            try {

                //Bitmap bm= ImageAdapter.bmap;
                mywallpaperManager.setBitmap(???);
                //Toast toast = Toast.makeText(this, "Set wallpaper successfully!", Toast.LENGTH_LONG);
                //toast.show();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return true;
        default:
            return false;
    }
}



    }
4

1 回答 1

1

通过这样做让它工作:

public class ImagePagerFragment extends BaseFragment {

public static final int INDEX = 2;
public ImageAdapter imageadapt;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    menu.clear();
    inflater.inflate(R.menu.fr_imagepager_menu, menu);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fr_image_pager, container, false);
    ViewPager pager = (ViewPager) rootView.findViewById(R.id.pager);

    imageadapt = new ImageAdapter(getActivity());
    pager.setAdapter(imageadapt);
    pager.setCurrentItem(getArguments().getInt(Constants.Extra.IMAGE_POSITION, 0));
    return rootView;
}

private static class ImageAdapter extends PagerAdapter {

    private static final String[] IMAGE_URLS = Constants.IMAGES;
    public Bitmap imageFinal;
    private LayoutInflater inflater;
    private DisplayImageOptions options;

    ImageAdapter(Context context) {
        inflater = LayoutInflater.from(context);

        options = new DisplayImageOptions.Builder()
                .showImageForEmptyUri(R.drawable.ic_empty)
                .showImageOnFail(R.drawable.ic_error)
                .resetViewBeforeLoading(true)
                .cacheOnDisk(true)
                .imageScaleType(ImageScaleType.EXACTLY)
                .bitmapConfig(Bitmap.Config.RGB_565)
                .considerExifParams(true)
                .displayer(new FadeInBitmapDisplayer(300))
                .build();
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView((View) object);
    }

    @Override
    public int getCount() {
        return IMAGE_URLS.length;
    }

    @Override
    public Object instantiateItem(ViewGroup view, int position) {
        View imageLayout = inflater.inflate(R.layout.item_pager_image, view, false);
        assert imageLayout != null;
        final TouchImageView imageView = (TouchImageView) imageLayout.findViewById(R.id.image);
        final ProgressBar spinner = (ProgressBar) imageLayout.findViewById(R.id.loading);

        ImageLoader.getInstance().displayImage(IMAGE_URLS[position], imageView, options, new SimpleImageLoadingListener() {
            @Override
            public void onLoadingStarted(String imageUri, View view) {
                spinner.setVisibility(View.VISIBLE);
                view.setVisibility(View.GONE);
            }

            @Override
            public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
                String message = null;
                switch (failReason.getType()) {
                    case IO_ERROR:
                        message = "Input/Output error";
                        break;
                    case DECODING_ERROR:
                        message = "Image can't be decoded";
                        break;
                    case NETWORK_DENIED:
                        message = "Downloads are denied";
                        break;
                    case OUT_OF_MEMORY:
                        message = "Out Of Memory error";
                        break;
                    case UNKNOWN:
                        message = "Unknown error";
                        break;
                }
                Toast.makeText(view.getContext(), message, Toast.LENGTH_SHORT).show();

                spinner.setVisibility(View.GONE);
            }

            @Override
            public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
                spinner.setVisibility(View.GONE);
                view.setVisibility(View.VISIBLE);
                //imageView.buildDrawingCache();
                //imageFinal = imageView.getDrawingCache();
                imageFinal=loadedImage;
                //imageFinal = ((BitmapDrawable)imageView.getDrawable()).getBitmap();
            }
        });


        view.addView(imageLayout, 0);
        return imageLayout;


    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view.equals(object);
    }

    @Override
    public void restoreState(Parcelable state, ClassLoader loader) {
    }

    @Override
    public Parcelable saveState() {
        return null;
    }
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.fr_item_wallpaper:
            Log.d("wallpaper", "selected");
            WallpaperManager mywallpaperManager = WallpaperManager.getInstance(getActivity().getApplicationContext());
            try {

                //Bitmap bm= ImageAdapter.bmap;
                mywallpaperManager.setBitmap(imageadapt.imageFinal);
                //Toast toast = Toast.makeText(this, "Set wallpaper successfully!", Toast.LENGTH_LONG);
                //toast.show();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return true;
        default:
            return false;
    }
}



    }

问题是选择的图像和壁纸图像不一样......

有小费吗?

于 2015-08-27T17:25:20.267 回答