2013-09-28 1 views
0

내 앱을 탐색하는 사용자가 이미지를 배경 화면으로 설정할 수있는 기능을 구현하려고합니다. 유니버설 이미지 로더 (Universal Image Loader)를 사용하고 있으며, 배경 화면을 설정할 때를 제외하면 모든 것이 훌륭합니다. Stackoverflow 및 다른 웹 사이트에서 여러 가지 다른 방법을 시도했지만 성공했다. 여기에서 솔루션을 사용하는이 마지막 시도 : Android set image as wallpaper유니버설 이미지 로더를 사용하여 현재 이미지를 가져 와서 배경 화면으로 설정하려고 시도합니다.

을 구현 한 후 모든 setWall를 호출 I 버튼 (setwallbtn)를 선택 시점까지 괜찮 실행됩니다. 그 시점에서 나는 내 logcat (전체 logcat 오류, 코드 후 아래에 게시)에 오류가 잔뜩.

다음은 pageview_item.xml 및 ImagePagerActivity.java입니다.

누구든지 제공 할 수있는 도움을 주시면 대단히 감사하겠습니다.

감사합니다.

pageview_item.xml

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:padding="1dip" > 

    <ImageView 
     android:id="@+id/image" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:adjustViewBounds="true" 
     android:contentDescription="@string/descr_image" /> 

    <ProgressBar 
     android:id="@+id/loading" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:visibility="gone" /> 

    <ImageView 
     android:id="@+id/setwallbtn" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="bottom|center" 
     android:adjustViewBounds="true" 
     android:clickable="true" 
     android:contentDescription="@string/setwall" 
     android:maxHeight="55dp" 
     android:onClick="setWall" 
     android:src="@drawable/setwallpaper" /> 

</FrameLayout> 

imagepageractivity.java

import java.io.IOException; 
import android.app.WallpaperManager; 
import android.graphics.Bitmap; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.drawable.Drawable; 
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.View; 
import android.view.ViewGroup; 
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.ImageScaleType; 
import com.nostra13.universalimageloader.core.assist.SimpleImageLoadingListener; 
import com.rwilco12.wallpapergallery.Constants.Extra; 

/** 
* @original author Sergey Tarasevich (nostra13[at]gmail[dot]com) 
*/ 
public class ImagePagerActivity extends BaseActivity { 

    private static final String STATE_POSITION = "STATE_POSITION"; 

    DisplayImageOptions options; 

    ViewPager pager; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.pageview); 

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

     if (savedInstanceState != null) { 
      pagerPosition = savedInstanceState.getInt(STATE_POSITION); 
     } 

     options = new DisplayImageOptions.Builder() 
      .showImageForEmptyUri(R.drawable.error) 
      .showImageOnFail(R.drawable.error) 
      .resetViewBeforeLoading() 
      .cacheOnDisc() 
      .bitmapConfig(Bitmap.Config.RGB_565) 
      .resetViewBeforeLoading() 
      .imageScaleType(ImageScaleType.IN_SAMPLE_INT) 
      .build(); 

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

    //Begin code from: https://stackoverflow.com/questions/11938182/android-set-image-as-wallpaper 
    // 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(); 
     } 
    } 
    //End code from: https://stackoverflow.com/questions/11938182/android-set-image-as-wallpaper 


    @Override 
    public void onSaveInstanceState(Bundle outState) { 
     outState.putInt(STATE_POSITION, pager.getCurrentItem()); 
    } 

    private class ImagePagerAdapter extends PagerAdapter { 

     private String[] images; 
     private LayoutInflater inflater; 

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

     @Override 
     public void destroyItem(ViewGroup 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(ViewGroup view, int position) { 
      View imageLayout = inflater.inflate(R.layout.pageview_item, view, false); 
      ImageView imageView = (ImageView) imageLayout.findViewById(R.id.image); 
      final ProgressBar spinner = (ProgressBar) imageLayout.findViewById(R.id.loading); 

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

       @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(ImagePagerActivity.this, message, Toast.LENGTH_SHORT).show(); 

        spinner.setVisibility(View.GONE); 
       } 

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

      ((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) { 
     } 
    } 

로그 캣 에러

09-28 10:01:36.334: W/dalvikvm(26948): threadid=1: thread exiting with uncaught exception (group=0x420772a0) 
09-28 10:01:36.334: E/AndroidRuntime(26948): FATAL EXCEPTION: main 
09-28 10:01:36.334: E/AndroidRuntime(26948): java.lang.IllegalStateException: Could not find a method setWall(View) in the activity class com.rwilco12.wallpapergallery.ImagePagerActivity for onClick handler on view class android.widget.ImageView with id 'setwallbtn' 
09-28 10:01:36.334: E/AndroidRuntime(26948): at android.view.View$1.onClick(View.java:3686) 
09-28 10:01:36.334: E/AndroidRuntime(26948): at android.view.View.performClick(View.java:4223) 
09-28 10:01:36.334: E/AndroidRuntime(26948): at android.view.View$PerformClick.run(View.java:17281) 
09-28 10:01:36.334: E/AndroidRuntime(26948): at android.os.Handler.handleCallback(Handler.java:615) 
09-28 10:01:36.334: E/AndroidRuntime(26948): at android.os.Handler.dispatchMessage(Handler.java:92) 
09-28 10:01:36.334: E/AndroidRuntime(26948): at android.os.Looper.loop(Looper.java:137) 
09-28 10:01:36.334: E/AndroidRuntime(26948): at android.app.ActivityThread.main(ActivityThread.java:4898) 
09-28 10:01:36.334: E/AndroidRuntime(26948): at java.lang.reflect.Method.invokeNative(Native Method) 
09-28 10:01:36.334: E/AndroidRuntime(26948): at java.lang.reflect.Method.invoke(Method.java:511) 
09-28 10:01:36.334: E/AndroidRuntime(26948): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1008) 
09-28 10:01:36.334: E/AndroidRuntime(26948): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:775) 
09-28 10:01:36.334: E/AndroidRuntime(26948): at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:106) 
09-28 10:01:36.334: E/AndroidRuntime(26948): at dalvik.system.NativeStart.main(Native Method) 
09-28 10:01:36.334: E/AndroidRuntime(26948): Caused by: java.lang.NoSuchMethodException: setWall [class android.view.View] 
09-28 10:01:36.334: E/AndroidRuntime(26948): at java.lang.Class.getConstructorOrMethod(Class.java:460) 
09-28 10:01:36.334: E/AndroidRuntime(26948): at java.lang.Class.getMethod(Class.java:915) 
09-28 10:01:36.334: E/AndroidRuntime(26948): at android.view.View$1.onClick(View.java:3679) 
09-28 10:01:36.334: E/AndroidRuntime(26948): ... 12 more 

답변

0

설정 시도 O

public void setWall(View v) { 
    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(v)); 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
: nclick는 롤캣이 같은

뭔가를 원하는 것과 일치하는

관련 문제