Vraag Android - Geen schermafbeelding maken van huidig ​​scherm


De code werkt prima voor de eerste schermafbeelding en blijft dezelfde schermafbeelding maken, ongeacht het verplaatsen naar een andere weergave.

Hoe kom je aan de huidige screenshot?

public void saveBitmap(Bitmap bitmap) {

    File imagePath = new File(Environment.getExternalStorageDirectory() + "/" + new SimpleDateFormat("yyyyMMddhhmmss'.jpg'").format(new Date()) );
    FileOutputStream fos =null;
    try {
        fos = new FileOutputStream(imagePath);
        bitmap.compress(CompressFormat.JPEG, 100, fos);
        fos.flush();
        fos.close();
    } catch (FileNotFoundException e) {
        Log.e("GREC", e.getMessage(), e);
    } catch (IOException e) {
        Log.e("GREC", e.getMessage(), e);
    }
}

klik info:

@Override
public void onClick(View v) {
    switch (v.getId()) {
    case R.id.iSave:
          Bitmap bitmap = null;
          bitmap = takeScreenshot();
          saveBitmap(bitmap);
        break;
    } 
}

hier:

public Bitmap takeScreenshot() {
   View rootView = findViewById(android.R.id.content).getRootView();
   rootView.setDrawingCacheEnabled(true);
   return rootView.getDrawingCache();
}

12
2018-05-04 13:08


oorsprong


antwoorden:


telefoontje rootView.setDrawingCacheEnabled(false); na het maken van de screenshot. Als u het uit en weer inschakelt, moet het correct worden bijgewerkt.

public Bitmap takeScreenshot() {
   View rootView = findViewById(android.R.id.content).getRootView();
   rootView.setDrawingCacheEnabled(true);
   Bitmap bitmap = rootView.getDrawingCache();
   rootView.setDrawingCacheEnabled(false);
   return bitmap;
}

15
2018-05-10 00:41



Ik heb ooit geprobeerd de stroom vast te leggen Activity en deel vervolgens het screenshot. Dit hieronder is hoe ik het deed, bekijk ze als je nog steeds geïnteresseerd bent, en ik denk dat je het daarmee eens bent.

Eerste, krijg je de root-weergave van de huidige Activity:

View rootView = getWindow().getDecorView().findViewById(android.R.id.content);

of

View rootView = findViewById(android.R.id.content);

of

View rootView = findViewById(android.R.id.content).getRootView();

Tweede, krijg Bitmap vanuit de rootweergave:

public static Bitmap getScreenShot(View view) {
    View screenView = view.getRootView();
    screenView.setDrawingCacheEnabled(true);
    Bitmap bitmap = Bitmap.createBitmap(screenView.getDrawingCache());
    screenView.setDrawingCacheEnabled(false);
    return bitmap;
}

Derde, sla het op Bitmap in de SDCard:

private final static String dir = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Screenshots";
public static void store(Bitmap bm, String fileName){
    File dir = new File(dir);
    if(!dir.exists())
        dir.mkdirs();
    File file = new File(dir, fileName);
    try {
        FileOutputStream fOut = new FileOutputStream(file);
        bm.compress(Bitmap.CompressFormat.PNG, 85, fOut);
        fOut.flush();
        fOut.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

At last, deel het screenshotbestand:

private void shareImage(String file){
    Uri uri = Uri.fromFile(file);
    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_SEND);
    intent.setType("image/*");
    intent.putExtra(android.content.Intent.EXTRA_SUBJECT, "");
    intent.putExtra(android.content.Intent.EXTRA_TEXT, "");
    intent.putExtra(Intent.EXTRA_STREAM, uri);
    startActivity(Intent.createChooser(intent, "Share Screenshot"));
}

2
2018-05-16 11:41