2015-12-17 77 views
5

嗨我試圖編寫一個功能,需要截圖。 我發現了一個代碼,它可以完美地處理按鈕clicklistner,但是當我刪除按鈕clicklistner並試圖在創建位圖時截取屏幕截圖時,我會看到它是空的。 它爲什麼會發生?Android採取截圖圖像

佈局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:id="@+id/LinearLayout01" 
> 
<Button 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="munch" 
    android:id="@+id/munchscreen" 
    /> 
<ImageView 
    android:layout_width="fill_parent" 
    android:layout_height="500dp" 
    android:id="@+id/screenshots" 

    /> 

活動:

public class MainActivity extends Activity { 
    LinearLayout L1; 
    ImageView image; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity); 


     L1 = (LinearLayout) findViewById(R.id.LinearLayout01); 
     Button but = (Button) findViewById(R.id.munchscreen); 
     but.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       View v1 = L1.getRootView(); 
       v1.setDrawingCacheEnabled(true); 
       Bitmap bm = v1.getDrawingCache(); 
       BitmapDrawable bitmapDrawable = new BitmapDrawable(bm); 
       image = (ImageView) findViewById(R.id.screenshots); 
       image.setBackgroundDrawable(bitmapDrawable); 
      } 
     }); 

    } 


} 
+0

你可以嘗試在'onPostCreate書面方式代碼()' –

回答

3

只是試圖採取截圖在OnCreate位圖我得到的是空的。爲什麼會發生?

用戶界面不會被渲染。鑑於您使用的方法,您需要讓框架在捕獲屏幕截圖之前真正繪製UI。

相反,如果你有根Viewdraw()Bitmap -backed Canvas,即威力onCreate()已經工作。這取決於根View是否已用measure()layout()調用,但我不確定這是否已在onCreate()或稍後發生。

+0

好的非常感謝 –

0

你可以試試這個。 公共類MainActivity擴展活動LinearLayout L1; ImageView image;

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity); 


    L1 = (LinearLayout) findViewById(R.id.LinearLayout01); 
    Button but = (Button) findViewById(R.id.munchscreen); 
    /*but.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      View v1 = L1.getRootView(); 
      v1.setDrawingCacheEnabled(true); 
      Bitmap bm = v1.getDrawingCache(); 
      BitmapDrawable bitmapDrawable = new BitmapDrawable(bm); 
      image = (ImageView) findViewById(R.id.screenshots); 
      image.setBackgroundDrawable(bitmapDrawable); 
     } 
    });*/ 
} 
    @Override 
public void onPostCreate() 
{ 
    View v1 = L1.getRootView(); 
      v1.setDrawingCacheEnabled(true); 
      Bitmap bm = v1.getDrawingCache(); 
      BitmapDrawable bitmapDrawable = new BitmapDrawable(bm); 
      image = (ImageView) findViewById(R.id.screenshots); 
      image.setBackgroundDrawable(bitmapDrawable); 
} 



}