2013-12-03 2 views
0

Я пытаюсь setwallpaper из моего класса, который расширяет видимость суперкласса, я пытаюсь преобразовать представление в растровое изображение, но я получаю сообщение об ошибке (NullPointerException).setwallpaper из класса, который расширяет вид

case R.id.wallpaper: // This is an event of my button 

     View view = new CustomWallpaper(this); 


     b = convertToBitmap(view); 

     WallpaperManager myWallpaperManager 
     = WallpaperManager.getInstance(getApplicationContext()); 

     try { 
      myWallpaperManager.setBitmap(b); 
      new CustomToast(context, "Wallpaper has been set").show(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     break; 

и это мой метод

private Bitmap convertToBitmap(View view) { 
    // TODO Auto-generated method stub 

    Bitmap viewCapture = null; 

    view.setDrawingCacheEnabled(true); 

    viewCapture = Bitmap.createBitmap(view.getDrawingCache()); 

    view.setDrawingCacheEnabled(false); 

    return viewCapture; 
} 

И это мой класс, который расширяет вид

public class CustomWallpaper extends View { 

public CustomWallpaper(Context context) { 
    super(context); 
    // TODO Auto-generated constructor stub 

    setBackgroundColor(Color.BLACK); 

    LayoutParams params = new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT); 

    setLayoutParams(params); 
} 

@SuppressLint("DrawAllocation") 
@Override 
protected void onDraw(Canvas canvas) { 
    // TODO Auto-generated method stub 
    super.onDraw(canvas); 

    Paint paint = new Paint(); 

    paint.setColor(Color.RED); 

    canvas.drawCircle(50, 50, 30, paint); 

} 

}

Спасибо

+0

Разместите LogCat на то, где вы получили исключения нулевого указателя .. – Piyush

+0

После добавления кода, который размещен здесь Mac_Focha я получаю эту ошибку: 12-03 12: 27: 42.336: E/AndroidRuntime (3526): FATAL EXCEPTION: main 12-03 12: 27: 42.336: E/AndroidRuntime (3526): java.lang.IllegalArgumentException: ширина и высота должны быть> 0 12-03 12: 27: 42.336: E/AndroidRuntime (3526): at android.graphics.Bitmap.createBitmap (Bitmap.java:687) 12-03 12: 27: 42.336: E/AndroidRuntime (3526): \t at android.graphics.Bitmap.createBitmap (Bitmap .java: 666) 12-03 12: 27: 42.336: E/AndroidRuntime (3526): \t at android.graphics. Bitmap.createBitmap (Bitmap.java:633) 12-03 12: 27: 42.336: E/AndroidRuntime (3526): – Dardan

+0

вы создаете новый CustomView в OnClick. Этот недавно созданный View не привязан к окну. получите ссылку CustomView, которая прикреплена к окну Activity и ваша работа над этим –

ответ

1

тогда вам не нужно создавать CustomView. попробуй это. это может помочь вам ...

public void onClick(View view) { 
    switch (view.getId()) { 
    case R.id.wallpaper: 
     Bitmap bitmap = getWallPaperBitmap(); 
     ....... 
     wallPaperManager.setBitmap(bitmap); 
     break; 

    default: 
     break; 
    } 
} 

public static Bitmap getWallPaperBitmap() { 
    Bitmap bitmap = Bitmap.createBitmap(50, 50, Bitmap.Config.ARGB_8888); 
    Canvas canvas = new Canvas(bitmap); 
    canvas.drawARGB(0, 0, 0, 0); 
    Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); 
    paint.setColor(Color.RED); 
    // this style will fill the circle 
    paint.setStyle(Paint.Style.FILL); 
    // this style will draw Circle path. 
    paint.setStyle(Paint.Style.STROKE); 
    canvas.drawCircle(bitmap.getWidth()/2, bitmap.getHeight()/2, 40, paint); 
    return bitmap; 
} 
+0

Спасибо за попытку чтобы помочь мне, но я не пытаюсь получить представление через xml, но вместо этого я хочу, чтобы из класса java, который расширяет представление, вы можете проверить на свой вопрос класс java, который расширяет представление. – Dardan

+0

И теперь вы очень близки к решению моей проблемы, теперь проблем не было, но после установки обои только черный цвет фона был установлен, не видно красного круга на обоях спасибо – Dardan

+0

Спасибо, я исправил его – Dardan

1
 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 { 
     canvas.drawColor(Color.WHITE); 
    } 
    view.draw(canvas); 

и ваша растровая карта возвращенаБытовая карта

+0

добавил ваш код до b = convertToBitmap (просмотреть); но теперь у меня есть еще одна ошибка, в которой говорится, что IllegalArgumentException: ширина и высота должны быть> 0 – Dardan

+0

это означает, что ваш вид еще не завышен, или имеет размер 0,0 по какой-либо причине, попробуйте расследовать его с помощью отладчика orso –

Смежные вопросы