0

Ceci est mon premier post, alors faites-moi confiance. J'essaie de définir un fond d'écran, à l'intérieur d'une classe de fragments. J'utilise UIL et le bitmap que je veux utiliser est chargé à partir d'un URI et se trouve dans une classe d'adaptateur de page.WallpaperManager from Fragment class

Je n'ai aucune idée de comment passer le bitmap au wallpapermanager.

Le code:

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; 
    } 
} 



    } 
+0

Got bitmap correcte en utilisant cette réponse: http://stackoverflow.com/questions/14079638/android-pageradapter-get-current-item-into-bitmap – Sorin

Répondre

1

eu à travailler en faisant ceci:

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; 
    } 
} 



    } 

problème est l'image sélectionnée et l'image de fond d'écran ne sont pas les mêmes ...

Tous conseils?