2013-06-19 8 views
8

短い質問:ビューを表示せずにビューのスクリーンショットを撮ることはできますか?

私は何らかの種類のレイアウトファイルを持っていて、それを膨らませて(または通常のCTORをコードに使用して)いるとします。

膨張したビューを表示する代わりに、いくつかの制限(画面の幅よりも大きい、特定の幅の&の高さ)の下で、どのように見えるかについての「スクリーンショット」(ビットマップ)を取りたいと思います。

私は画面上の任意の場所にビューを追加するのではなく、この目的のためだけに保持し、後で追加することができます。

このようなものは、物を置く方法を簡単に操作するのに便利です。例えば、イメージをその内部に置くレイアウトを使用して、イメージの周りにフレームがあるようにすることができます。

このようなことは可能ですか?もしそうなら、どのように?

+0

は、テストアプリケーションのためにこれをか?はいの場合はcom.android.systemui.screenshot.ScreenshotTest –

+0

をチェックすることができます "テストアプリケーション"を意味しますか?私はあらゆる種類のアプリについてそれについて知りたい。 –

+0

現在はテストできませんが、ビュー 'draw'メソッドはレイアウトに追加されていなくてもキャンバスに描画できるはずです。しかし、ライフサイクルのすべてのレイアウト段階でそれを実行する必要があります。 http://developer.android.com/reference/android/view/View.html#draw%28android.graphics.Canvas%29 – Jave

答えて

7

OK、私はthis linkに基づいて、それを行うための可能な方法を見つけた:使用方法の

public static Bitmap drawToBitmap(Context context,final int layoutResId, 
            final int width,final int height) 
{ 
    final Bitmap bmp = Bitmap.createBitmap(width,height,Bitmap.Config.ARGB_8888); 
    final Canvas canvas = new Canvas(bmp); 
    final LayoutInflater inflater = 
     (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    final View layout = inflater.inflate(layoutResId,null); 
    layout.setDrawingCacheEnabled(true); 
    layout.measure(
     MeasureSpec.makeMeasureSpec(canvas.getWidth(),MeasureSpec.EXACTLY), 
     MeasureSpec.makeMeasureSpec(canvas.getHeight(),MeasureSpec.EXACTLY)); 
    layout.layout(0,0,layout.getMeasuredWidth(),layout.getMeasuredHeight()); 
    canvas.drawBitmap(layout.getDrawingCache(),0,0,new Paint()); 
    return bmp; 
} 

例:

public class MainActivity extends ActionBarActivity 
{ 
    @Override 
    protected void onCreate(final Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     final ImageView iv = (ImageView)findViewById(R.id.image); 
     final DisplayMetrics metrics = getResources().getDisplayMetrics(); 
     final Bitmap b = drawToBitmap(this,R.layout.test, metrics.widthPixels, 
            metrics.heightPixels); 
     iv.setImageBitmap(b); 
    } 

} 
+0

このアンサーでリンクをクリックしないでください!!!それはアドウェアです! – Sevren

+0

@ Nerves82前回から変更されています。私はここにそのような問題のあることを決して置かないだろう。また、VirusTotalは、それが67のアンチウイルスに基づいて、大丈夫だと言う:https://www.virustotal.com/en/url/c3279c186440c89052ae0dbd9ac2c1ed5e0663904eed15eae5c49cae348b2f37/analysis/1460416779/ https://www.virustotal.com/en/url/51b003e759a05a34c58ebcb3078de02e73ee779dbffb54ab19ef0711fdd81af5/analysis/ 1460416787/ –

+0

@ Nerves82とにかく、Wayback –

関連する問題