2012-05-10 6 views
0

Я снимаю снимок экрана RelativeLayout, но это вызывает ошибку.как сделать снимок экрана?

ошибка:

05-10 17:43:44.249: ERROR/AndroidRuntime(7721): Caused by: java.lang.NullPointerException 
05-10 17:43:44.249: ERROR/AndroidRuntime(7721):  at android.graphics.Bitmap.createBitmap(Bitmap.java:358) 
05-10 17:43:44.249: ERROR/AndroidRuntime(7721):  at com.API.Connect.share(FacebookConnect.java:110) 

код:

public class Connect extends Activity implements LoginListener { 

    public static String news = " "; 

    RelativeLayout bitmapimage; 

    Bitmap bitmap; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.image); 
     bitmapimage = (RelativeLayout) findViewById(R.id.bitmapimg); 
     TextView txtlove = (TextView) findViewById(R.id.txtlove); 
     txtlove.setText(news.toString()); 
     share(); 

    } 

    public void share() { 

     View v1 = bitmapimage; 
     v1.setDrawingCacheEnabled(true); 

     bitmap = Bitmap.createBitmap(v1.getDrawingCache()); 

     v1.setDrawingCacheEnabled(false); 

     saveImage(); 

     // TODO Auto-generated method stub 

    } 

    void saveImage() { 
     String state = Environment.getExternalStorageState(); 
     Environment.MEDIA_MOUNTED.equals(state); 

     File myDir = new File("/mnt/sdcard/DCIM/Camera"); 
     myDir.mkdirs(); 

     String fname = "mytry.jpg"; 
     File file = new File(myDir, fname); 
     if (file.exists()) 
      file.delete(); 
     try { 
      FileOutputStream out = new FileOutputStream(file); 
      // create a Bitmap object from our image path. 
      bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out); 
      out.flush(); 
      out.close(); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

Nidhi Следуйте за этим [Ссылка] [1]. Я надеюсь, что это сработает для вас. [1]: http://stackoverflow.com/questions/7762643/android-take-screen-shot-programatically – vikky

ответ

5

То, что вы пытаетесь сделать, это правильно. Но в onCreate() ваше представление не было бы нарисовано. Это просто завышено. Поэтому вам, возможно, придется использовать метод ниже. попробуйте это.

@Override 
public void onWindowFocusChanged(boolean hasFocus) 
{ 
    super.onWindowFocusChanged(hasFocus); 
    share(); //Call your share() here. 
} 

Этот метод вызывается один раз ваш взгляд обращается, и, следовательно, вы будете иметь возможность получить растровое изображение путем переопределения этого метода.

1

Я думаю, что я нашел свою ошибку. getdrawingcache уже возвращает растровое изображение, поэтому вам не нужно создавать новый , что, вероятно, приводит к исключению nullpointer.

так что вы должны попробовать

bitmap = v1.getDrawingCache();

вместо

bitmap = Bitmap.createBitmap(v1.getDrawingCache());

дайте мне знать, если это работает.

здоровается, Wottah

+0

благодарит вас за ответ – nshah