2017-09-25 9 views
0

私はApi 21の上でwebviewのスクリーンショットを試みていますが、画面に表示されるwebviewのコンテンツだけをキャプチャし、他の部分もキャプチャされています。それは空白を示しています。上記のapiでWebviewのスクリーンショットを撮影する

私はスクリーンショットを撮るために以下のコードを使用しています。

public static String getScreenShotOf(View view, Context context) { 
    try { 
     DisplayMetrics displayMetrics = new DisplayMetrics(); 
     ((Activity) context).getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); 
     view.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)); 
     view.measure(displayMetrics.widthPixels, displayMetrics.heightPixels); 
     view.layout(0, 0, displayMetrics.widthPixels, displayMetrics.heightPixels); 
     view.buildDrawingCache(); 
     Bitmap bitmap = Bitmap.createBitmap(view.getMeasuredWidth(), view.getMeasuredHeight(), Bitmap.Config.ARGB_8888); 

     Canvas canvas = new Canvas(bitmap); 
     view.draw(canvas); 

     return storeImage(context, bitmap); 
    } 
    catch (Exception e) { 
     UtillsG.showToast("Error while taking screenshot.", context, false); 
    } 

    return null; 
} 

このことは、LOLLIPOPまたはそれ以下のバージョンでは完全に機能します。 kitkatとマシュマロデバイスのスクリーンショットをご覧ください。

誰でも私にこれを助けることができますか?

いずれのサポートも高く評価されます。

enter image description here

enter image description here

答えて

4

あなたはWebViewのように、rootのレイアウトを使用して、以下のコードを試すことができます。

public Bitmap takeScreenshot() { 

View rootView = getWindow().getDecorView().findViewById(R.id.PP_Ll); 
rootView.setDrawingCacheEnabled(true); 
return rootView.getDrawingCache(); 

}

公共ボイドsaveBitmap(ビットマップビットマップ){

String root = Environment.getExternalStorageDirectory().toString(); 
File newDir = new File(root + "/Folder"); 
newDir.mkdirs(); 
Random gen = new Random(); 
int n = 10000; 
n = gen.nextInt(n); 
String fotoname = "Photo-" + n + ".jpg"; 
File file = new File(newDir, fotoname); 
if (file.exists()) 
    file.delete(); 
try { 
    FileOutputStream fos = new FileOutputStream(file); 
    bitmap.compress(CompressFormat.JPEG, 100, fos); 
    fos.flush(); 
    fos.close(); 
    Toast.makeText(getApplicationContext(), 
      "Saved in folder: 'Folder'", Toast.LENGTH_SHORT).show(); 

} catch (FileNotFoundException e) { 
    e.printStackTrace(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

}}

+0

おかげSuhebのrafique。それは私が必要とするように働いた。 –

+0

ようこそparambir。してくださいupvote :) –

+0

@SuhebRafique 2行目で 'findViewById()'に渡した 'PP_Ll'は何ですか? 私は自分のwebViewのidを入れようとしましたが、webViewに表示されているもののスクリーンショットを撮るだけです。 – Chirag

関連する問題