2012-08-14 13 views
3

Voici mes codes, je veux utiliser le gestionnaire de fond d'écran pour définir comme fond d'écran. J'utilise Universal Image Loader, mais je ne sais pas comment mettre en œuvre le gestionnaire de fond d'écran. Mon setWall() ne fonctionne pas, un peu confus.Utilisation de WallpaperManager dans Android pour mettre en fond d'écran

import android.graphics.Bitmap; 
    import android.os.Bundle; 
    import android.os.Parcelable; 
    import android.support.v4.view.PagerAdapter; 
    import android.support.v4.view.ViewPager; 
    import android.view.LayoutInflater; 
    import android.view.Menu; 
    import android.view.MenuItem; 
    import android.view.View; 
    import android.view.animation.Animation; 
    import android.view.animation.AnimationUtils; 
    import android.widget.ImageView; 
    import android.widget.ProgressBar; 
    import android.widget.Toast; 

    import com.nostra13.universalimageloader.core.DisplayImageOptions; 
    import com.nostra13.universalimageloader.core.assist.FailReason; 
    import com.nostra13.universalimageloader.core.assist.ImageLoadingListener; 
    import com.nostra13.universalimageloader.core.assist.ImageScaleType; 


    public class ImageActivity extends BaseActivity { 

     private DisplayImageOptions imageoptions; 

     private ViewPager imagepager; 

     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 

      setContentView(R.layout.imagepager); 


      Bundle bundle = getIntent().getExtras(); 
      String[] imageUrls = bundle.getStringArray(Extra.IMAGES); 
      int pagerPosition = bundle.getInt(Extra.IMAGE_POSITION, 0); 
      imageoptions = new DisplayImageOptions.Builder() 
       .showImageForEmptyUri(R.drawable.noimage) 
       .cacheOnDisc() 
       .imageScaleType(ImageScaleType.EXACT) 
       .build(); 

      imagepager= (ViewPager) findViewById(R.id.imagepager); 
      imagepager.setAdapter(new ImagePagerAdapter(imageUrls)); 
      imagepager.setCurrentItem(pagerPosition); 
     } 


public void setWall() { 

    WallpaperManager myWallpaperManager 
    = WallpaperManager.getInstance(getApplicationContext()); 
    try { 
    myWallpaperManager.setResource(R.drawable.app_icon); //<--My app just set my app icon image as wallpaper, this is not I wanted. I wanted to set my selected image as wallpaper 
    } catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } 

} 

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.main_menu, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      case R.id.setWall: 
       setWall(); 
       return true; 
      default: 
       return false; 
     } 
    } 

@Override 
    protected void onStop() { 
     imageLoader.stop(); 
     super.onStop(); 
    } 

    private class ImagePagerAdapter extends PagerAdapter { 

     private String[] images; 
     private LayoutInflater inflater; 

     ImagePagerAdapter(String[] images) { 
      this.images = images; 
      inflater = getLayoutInflater(); 
     } 

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

     @Override 
     public void finishUpdate(View container) { 
     } 

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

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

      imageLoader.displayImage(images[position], imageView, imageoptions, new ImageLoadingListener() { 
       public void onLoadingStarted() { 
        spinner.setVisibility(View.VISIBLE); 
       } 

       public void onLoadingFailed(FailReason failReason) { 
        String message = null; 
        switch (failReason) { 
         case IO_ERROR: 
          message = "Input/Output error"; 
          break; 
         case OUT_OF_MEMORY: 
          message = "Out Of Memory error"; 
          break; 
         case UNKNOWN: 
          message = "Unknown error"; 
          break; 
        } 
        Toast.makeText(ImagePagerActivity.this, message, Toast.LENGTH_SHORT).show(); 

        spinner.setVisibility(View.GONE); 
        imageView.setImageResource(android.R.drawable.ic_delete); 
       } 

       public void onLoadingComplete(Bitmap loadedImage) { 
        spinner.setVisibility(View.GONE); 
        Animation anim = AnimationUtils.loadAnimation(ImagePagerActivity.this, R.anim.fade_in); 
        imageView.setAnimation(anim); 
        anim.start(); 
       } 

       public void onLoadingCancelled() { 
        // Do nothing 
       } 
      }); 

      ((ViewPager) 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 void startUpdate(View container) { 
     } 
    } 





} 
+0

Ma question pour vous est, qu'est-ce que vous * attendez * 'setWall()' faire? Vous lui donnez 0 comme valeur de ressource, pas un identifiant de ressource réel. Vous devez également fournir des informations sur ce que vous entendez par "ne pas travailler" - est-ce que ça plante? Obtenez-vous un résultat inattendu? S'il plante, regardez le LogCat et voyez les détails de l'exception. Si vous ne comprenez toujours pas, modifiez le journal de LogCat dans votre question. – kcoppock

+0

J'ai modifié mes codes et voici mon logcat. –

+0

Oui, c'est quoi 'R.id.imagepager' Ce n'est pas une solution. Faites juste cela avec n'importe quel 'R.drawable.someimageresource' Pour cela, tapez simplement dans votre espace de travail comme' R.drawable.' et après l'utilisation 'Ctrl + spacebar' il affichera vos images. Sinon, essayez l'icône de lancement de l'application avec 'R.drawable.ic_launcher' ou' R.drawable.icon' Cela dépend de votre SDK. Ou essayez simplement ce 'R.drawable.noimage' – Praveenkumar

Répondre

5

Au lieu de myWallpaperManager.setResource(0); Pourquoi ne pas vous utilisez le myWallpapaerManager.setResource(R.drawable.yourimage)

Jetez un oeil à Wallpapaer Manager example. Hope this helps vous beaucoup.

+0

Merci, mais je suis déjà en train d'utiliser cet exemple maintenant. Mais je n'ai aucune idée de comment l'implémenter. Que dois-je mettre en (R.drawable.yourimage)? Pouvez-vous montrer un exemple selon mes codes? –

+0

@ user1598107 Vous n'avez aucune image dans le dossier 'res/drawable-ldpi' (ou)' res/drawable-mdpi' (ou) 'res/drawable/hdpi' Utilisez n'importe qui à partir de là. – Praveenkumar

+0

Je viens d'éditer mon code SPK. Vérifiez-le. –

Questions connexes