2

私のアプリケーションには、相対レイアウトのリスト ビューがあります。ここで、リスト ビューで使用できるすべてのコンテンツと、レイアウトに表示されるボタンやテキスト ビューなどの他のコンテンツを含む、レイアウト全体のスクリーン ショットを撮る必要があります。しかし、私のコードは画面の目に見える部分しか取りません。ここでのビューは親レイアウトです。

public void screen(){

     View v1 = findViewById(R.id.screenRoot);

    rel.layout(0, 0, rel.getMeasuredWidth(),rel.getMeasuredHeight());    
    View v = v1.getRootView();
    v.setDrawingCacheEnabled(true);

   /* v.measure(MeasureSpec.makeMeasureSpec(w, w), 
            MeasureSpec.makeMeasureSpec(h, h));*/


//        v.layout(0, 0, rel.getWidth(), rel.getHeight());
    v.buildDrawingCache(true);

    System.out.println("rel "+rel.getHeight()+" "+v.getHeight());
    Bitmap b = v.getDrawingCache();  
    v.setDrawingCacheEnabled(false);
    String extr = Environment.getExternalStorageDirectory().toString();
    File myPath = new File(extr, "tiket"+".jpg");
    FileOutputStream fos = null;
    try {
        fos = new FileOutputStream(myPath);
        b.compress(Bitmap.CompressFormat.JPEG, 100, fos);
        fos.flush();
        fos.close();
        MediaStore.Images.Media.insertImage(getContentResolver(), b, "Screen", "screen");
        System.out.println("my path "+myPath+" "+fos);
    }catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    Toast.makeText(getApplicationContext(), "Image Captured Successfully", 0).show();

}
4

1 に答える 1

1

ClickイベントなどからgetBitmapFromViewを呼び出します。R.id.rootは私のメインのRelativeLayoutなので、メインのレイアウトを渡すことができます。

LayoutInflater inflater = (LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE);
RelativeLayout root = (RelativeLayout)inflater.inflate(R.layout.youlayourfile,null);
root.setDrawingCacheEnabled(true);

Bitmap bmp = getBitmapFromView(this.getWindow().getDecorView().findViewById(R.id.root).getRootView());

URI uri = storPrintFile(bmp);

この関数は、レイアウトのビットマップを返します。これで、ビットマップをデバイスやその他の場所に保存する必要があります。

public Bitmap getBitmapFromView(View v) {
    v.setLayoutParams(new LayoutParams(
            RelativeLayout.LayoutParams.WRAP_CONTENT,
            RelativeLayout.LayoutParams.WRAP_CONTENT));
    v.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
            MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
    v.layout(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight());
    Bitmap b = Bitmap.createBitmap(v.getMeasuredWidth(),
            v.getMeasuredHeight(), Bitmap.Config.RGB_565);

    Canvas c = new Canvas(b);
    v.draw(c);
    return b;       
}

ビットマップをデバイスに保存します。

public URI storPrintFile(Bitmap bitmapToStore){
    ContextWrapper cw = new ContextWrapper(getApplicationContext());
    String path = cw.getDir("CapturedImages",Context.MODE_PRIVATE).getPath();
    File file = new File(path);
    boolean isFileCreated = false;
    if (!file.exists()) {
        isFileCreated = file.mkdir();
        System.out.println("Directory created in Internal Storage is :" + path);
    }
    String current = "Screen.jpg";//uniqueId.replace(" ", "-").replace(":", "-") + ".jpeg";
    System.out.println("Internal Storage path is : " + current);
    File mypath = new File(file, current);
    try {
        FileOutputStream out = new FileOutputStream(mypath);
        bitmapToStore.compress(Bitmap.CompressFormat.JPEG, 100, out);
        out.flush();
        out.close();

    } catch (Exception e) {
        e.printStackTrace();
    }
    return mypath.toURI();
}
于 2012-10-12T07:13:22.770 に答える