2011-10-21 10 views
3

私はビットマップにビューをレンダリングし、ビットマップを保存したいと考えています。 しかし、私はすべてオフスクリーンでそれを行う必要があります。Androidでビットマップからビットマップにオフスクリーンをレンダリングする

私はこれを試してみた:

LayoutInflater inflater = getLayoutInflater(); 
    View linearview = (View) findViewById(R.id.linearview); 
    linearview = inflater.inflate(R.layout.intro, null); 


Bitmap bm = Bitmap.createBitmap(linearview.getMeasuredWidth(), linearview.getMeasuredHeight(), Bitmap.Config.ARGB_8888);     
Canvas c = new Canvas(bm); 
linearview.layout(0, 0, linearview.getLayoutParams().width, linearview.getLayoutParams().height); 
linearview.draw(c); 

    String extStorageDirectory = Environment.getExternalStorageState().toString(); 
    extStorageDirectory = Environment.getExternalStorageDirectory().toString(); 
    OutputStream outStream = null; 
    File file = new File(extStorageDirectory, "screen1.PNG"); 

    try { 
     outStream = new FileOutputStream(file); 
     bm.compress(Bitmap.CompressFormat.PNG, 100, outStream); 
     outStream.flush(); 
     outStream.close(); 


    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

EDIT: マイアプリのクラッシュビューdoesntのは、任意の幅または高さを持っているので。 (対策はそれを修正しようとしている)

そして悪い英語のためにsrry。

+1

クラッシュについて尋ねるとき – jqpubliq

+0

iが設定することができますどのようにサービス –

+0

でそれを行うあなたは常にあなたのトレースを投稿する必要がありますサービスへのレイアウト? –

答えて

1

問題はここにある:

linearview = inflater.inflate(R.layout.intro, null); 

あなたは親のレイアウトを渡す必要があるので、それを適切に測定することができます。 ビューをレイアウトに添付したくないのは分かっていますが、この他のバージョンのメソッドを使用してattachToRootにfalseを渡すことで、測定のためだけに親レイアウトを使用することができます。提供(attachToRootがtrueの場合)オプションのビューが生成された階層の親とするか、あるいは単にオブジェクト:

ルート:paramentersの公式ドキュメントから

public View inflate (int resource, ViewGroup root, boolean attachToRoot) 

返された階層のルートのLayoutParams値のセット(attachToRootがfalseの場合)

attachToRoot:膨張した階層をルートパラメータに添付する必要がありますか? falseの場合、ルートは、XMLのルートビューのLayoutParamsの正しいサブクラスを作成するためにのみ使用されます。

疑いで、あなたが常に親のレイアウトとして、アプリのコンテンツを渡すことができます。

findViewById(android.R.id.content); 
関連する問題