2012-08-13 2 views
2

안드로이드 WallpaperManager를 사용하여 이미지를 배경 화면으로 설정하는 방법에 대한 예제 코드를 보여주십시오. 나는 나의 질문을 짧게하고 편집했다. 바라건대 너희들이 내 질문을 이해할 수 있기를 바랍니다. 내가 한 몇 가지 시도를 보여 드리겠습니다.안드로이드가 벽지로 설정된 이미지

HomeActivity.class

public class HomeActivity extends BaseActivity { 

    String[] imageUrls; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.ac_home); 
     ArrayList<String> url = new ArrayList<String>(); 
     try { 
      URL url_link = new URL("http://mywebsite.net/web/thumb.xml"); 
      DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
      DocumentBuilder db = dbf.newDocumentBuilder(); 
      Document doc = db.parse(new InputSource(url_link.openStream())); 
      doc.getDocumentElement().normalize(); 
      NodeList nodeList = doc.getElementsByTagName("list"); 

      for (int i = 0; i < nodeList.getLength(); i++) { 
       Node node = nodeList.item(i); 

       Element fstElmnt = (Element)node; 
       NodeList nameList = fstElmnt.getElementsByTagName("thumb_url"); 
       Element nameElement = (Element)nameList.item(0); 
       nameList = nameElement.getChildNodes(); 

       url.add(nameList.item(0).getNodeValue()); 
      } 
      imageUrls = (String[]) url.toArray(new String[0]); 
     } catch (Exception e) { 
      System.out.println("XML Pasing Excpetion = " + e); 
     } 

    } 
    public void onImageGridClick(View view) { 
     Intent intent = new Intent(this, ImageGridActivity.class); 
     intent.putExtra(Extra.IMAGES, imageUrls); 
     startActivity(intent); 
    } 

    public void onImagePagerClick(View view) { 
     Intent intent = new Intent(this, ImagePagerActivity.class); 
     intent.putExtra(Extra.IMAGES, imageUrls); 
     startActivity(intent); 
    } 
} 

ImagePagerActivity.class

package com.nostra13.example.universalimageloader; 


import java.io.IOException; 


import android.app.WallpaperManager; 
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 ImagePagerActivity extends BaseActivity { 

    private ViewPager pager; 

    private DisplayImageOptions options; 



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

     setContentView(R.layout.ac_image_pager); 
     Bundle bundle = getIntent().getExtras(); 
     String[] imageUrls = bundle.getStringArray(Extra.IMAGES); 
     int pagerPosition = bundle.getInt(Extra.IMAGE_POSITION, 0); 

     options = new DisplayImageOptions.Builder() 
      .showImageForEmptyUri(R.drawable.image_for_empty_url) 
      .cacheOnDisc() 
      .imageScaleType(ImageScaleType.EXACT) 
      .build(); 

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

    public void setWallpaper() { 

     WallpaperManager myWallpaperManager 
     = WallpaperManager.getInstance(getApplicationContext()); 
     try { 
     myWallpaperManager.setResource(R.id.pager); // nothing happened 
     } 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.item_clear_memory_cache: 
       imageLoader.clearMemoryCache(); 
       return true; 
      case R.id.item_clear_disc_cache: 
       setWallpaper(); 
       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, options, 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) { 
     } 
    } 

} 

첫번째 시도 (내는 "pagerPosition 변수로 해석 할 수 없습니다"라는 오류를주고있다 pagerPosition)

public void setWallpaper(){ 
      Bitmap bitmap = BitmapFactory.decodeResource(getResources(), pagerPosition); 
    try { 
     ImagePagerActivity.this.setWallpaper(bitmap); 
      } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     } 
     Log.d("Gallery Example", "Image setted."); 
      } 

2 시도 (내 pagerPosition에서 오류가 발생했습니다. "pagerPosition을 다시 사용할 수 없습니다. 변수 ")

public void setWallpaper() { 

     try { 
      File file = new File("/sdcard/sampleimage"); 
      Bitmap bitmap = BitmapFactory.decodeResource(getResources(), pagerPosition); 
      bitmap.compress(CompressFormat.JPEG, 80, new FileOutputStream(file)); 
      Context context = this.getBaseContext(); 
      context.setWallpaper(bitmap);    
      Toast.makeText(getApplicationContext(), "Wallpaper has been set", Toast.LENGTH_SHORT).show();    
     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     }   
    } 

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

3 시도에 해결 (내 setResource (R.id.pager)는 viewpager에서 이미지를 받고 있지 않습니다.

public void setWallpaper() { 

     WallpaperManager myWallpaperManager 
     = WallpaperManager.getInstance(getApplicationContext()); 
     try { 
     myWallpaperManager.setResource(R.id.pager); 
     } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     } 

} 

내가 실행되지 않습니다 내 onCreate 내 전체 프로젝트의 위 아래 코드를 넣으면 결론

.

 Bundle bundle = getIntent().getExtras(); 
     String[] imageUrls = bundle.getStringArray(Extra.IMAGES); 
     final int pagerPosition = bundle.getInt(Extra.IMAGE_POSITION, 0); 
+0

아무도 도와 줄 수 있습니까? –

+0

전체 코드를 게시 할 수 있습니까? – rajpara

답변

6

ImagePagerActivity에서 아래 코드를 시도해 보았습니다. 아래 코드에서 테스트했는데 작동하고 있습니다.

// fetch bitmap from view 
public static Bitmap getBitmapFromView(View view) { 
    Bitmap returnedBitmap = Bitmap.createBitmap(view.getWidth(), view 
      .getHeight(), Bitmap.Config.ARGB_8888); 
    Canvas canvas = new Canvas(returnedBitmap); 
    Drawable bgDrawable = view.getBackground(); 
    if (bgDrawable != null) 
     bgDrawable.draw(canvas); 
    else 
     // if we unable to get background drawable then we will set white color as wallpaper 
     canvas.drawColor(Color.WHITE); 
    view.draw(canvas); 
    return returnedBitmap; 
} 

public void setWall(int i) { 
    WallpaperManager myWallpaperManager = WallpaperManager.getInstance(getApplicationContext()); 
    try { 
     // below line of code will set your current visible pager item to wallpaper 
     // first we have to fetch bitmap from visible view and then we can pass it to wallpaper 
     myWallpaperManager.setBitmap(getBitmapFromView(pager.getChildAt(1))); 

     // below line of code will set input stream data directly to wallpaper 
     // myWallpaperManager.setStream(InputStream Data); 

     // below line of code will set any image which is in the drawable folder 
     // myWallpaperManager.setResource(R.drawable.icon); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

현재 표시되는 호출기의 항목보기 (진행 휠 또는 이미지 인 경우)를 설정합니다.

+0

을 고쳐야합니다. 그것의 지금 일하고있다 .. 고마워한다 안드로이드 코더 –

+0

@rajpara 나는 나를 위해 일하지 않았다. setWall (int i)에서 무엇을 전달하는지 설명 할 수 있습니까? 감사합니다 – Joolah

+0

@rajpara, 나는 비슷한 [질문은] (http://stackoverflow.com/questions/27414798/set-image-wallaper-of-viewpager-in-universal-image-loader-uil), 줄 수있다. 나 손을 pls, 감사합니다 – Joolah

0

이것은 당신의 setBackground의 방법에 당신을 도울 수 ... 배경 화면에 파일 아무 문제를 설정해야합니다

String imagePath = ""; // YOUR PATH HERE 
FileInputStream is = new FileInputStream(new File(imagePath)); 
BufferedInputStream bis = new BufferedInputStream(is); 
Bitmap b = BitmapFactory.decodeStream(bis); 
Bitmap bitmapToUse = Bitmap.createScaledBitmap(b, parent.getWidth(), parent.getHeight(), true); 
b.recycle(); 

if(!("").equals(imagePath)){ 
    WallpaperManager wallpaperManager = WallpaperManager.getInstance(this); 
    Drawable wallpaperDrawable = wallpaperManager.getDrawable(); 
    wallpaperManager.setBitmap(bitmapToUse); 
} 

.

"saveImage()"에 대해 더 구체적으로 설명 할 수 있습니까? 어디에서 저장하려고합니까? 로컬 저장소입니까? 아니면 웹 사이트? 자세한 내용은 제발.

는 는 [편집] 명확성을 위해 업데이트 코드

[편집 2] URL에서 이미지를 저장하려면 은 ...

File imageFile = new File("image.png"); // This is location AND file name, all i put here was the filename 
URL url = new URL("http://www.whatever.com/image.png"); 

        Bitmap bmp = BitmapFactory.decodeStream(url.openConnection() 
          .getInputStream()); 

        FileOutputStream out = new FileOutputStream(imageFile); 
        bmp.compress(Bitmap.CompressFormat.PNG, 100, out); 

[편집 3]

'부모'이다

부모보기 (일반적으로 현재 활동보기). 이것을 설정하는 다른 방법이 있습니다. parent.width/height는 배경 이미지의 크기를 정의하는 방법입니다.

+0

내가 제안한 코드를 넣었습니다. 내 이미지 경로는 imageUrls입니다. 그것을 내 코드로 어떻게 설정합니까? parent.getWidth(), parent.getHeight()에서 오류가 발생했습니다. "부모는 해결할 수 없습니다". 해당 이미지를 로컬 SD로 다운로드하고 싶습니다. 이 라이언을 안내해 줘. 감사. –

+0

업데이트 된 답변보기 – RyanInBinary

+0

Ryan, 답변 해 주셔서 감사합니다.내 ImagePath를 setbackground()에 연결하려면 어떻게해야합니까? –

관련 문제