2017-03-23 1 views
0

Je suis en train de tester sur l'appareil xperia où il y a un bouton de navigation tactile en bas. Mon code capture une capture d'écran de l'activité actuelle, je ne veux pas inclure le bouton de navigation ci-dessous, je cache à l'aideCapture d'écran de l'activité laissée noire en bas à la place des boutons de navigation

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); 

maintenant, quand je presse « Prenez SCREENSHOT » Je peux voir NavButton caché et l'activité prend volume en plein écran mais la capture d'écran enregistrée est laissée vide en bas. Quel pourrait être le problème? Ci-dessous l'image de sortie !!

enter image description here

L'espace noir au-dessus est la space.I gauche ne veulent pas qu'il soit laissé

est le code ci-dessous.

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_fullscreen); 
    takeScreenshot= (Button) findViewById(R.id.takeScreenshot); 
    Drawable icon= getResources().getDrawable(R.drawable.ic_photo_camera); 
    takeScreenshot.setCompoundDrawablesWithIntrinsicBounds(icon, null, null, null); 
    takeScreenshot.setOnClickListener(this); 
    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 46323); 
    settings= (ImageButton) findViewById(R.id.settings); 
    settings.setOnClickListener(this); 
} 

@Override 
public void onClick(View v) { 
    int click=v.getId(); 
    if (click==R.id.takeScreenshot){ 
     isStoragePermissionGranted(); 
     // View rootView = getWindow().getDecorView().findViewById(android.R.id.content); 
    //  RelativeLayout relativeLayout= (RelativeLayout) findViewById(R.id.relativeLayout); 
     View rootView=findViewById(R.id.relativeLayout); 
     takeScreenshot.setVisibility(View.VISIBLE); 
     settings.setVisibility(View.VISIBLE); 
     try{ 
      getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); 
     }catch (Exception ex){ 
      Log.d(TAG,"Non Navigation button"); 
     } 
     Bitmap bmp=getScreenShot(rootView); 
     store(bmp); 
     takeScreenshot.setVisibility(View.VISIBLE); 
     settings.setVisibility(View.VISIBLE); 

     Log.d(TAG, Environment.getDataDirectory().toString()); 
    } 
    if (click==R.id.settings){ 

    } 
} 
public static Bitmap getScreenShot(View view) { 
    View screenView = view.getRootView(); 
    screenView.setDrawingCacheEnabled(true); 
    Bitmap bitmap = Bitmap.createBitmap(screenView.getDrawingCache()); 
    screenView.setDrawingCacheEnabled(false); 
    return bitmap; 
} 
public void store(Bitmap bm){ 
    String dirPath = Environment.getExternalStorageDirectory().getAbsolutePath()+"/iScreenShot"; 
    File dir = new File(Environment.getExternalStorageDirectory().toString()+"/iScreenShot"); 
    if(!dir.exists()) 
     dir.mkdirs(); 
    String tempFileName="shot"; 
    String extension=".png"; 
    int num=0; 
    File file=new File(dirPath,tempFileName+num+extension); 
    while (file.exists()){ 
     num++; 
     file=new File(dirPath,tempFileName+num+extension); 
    } 
    try { 
     FileOutputStream fOut = new FileOutputStream(file); 
     // bm.compress(Bitmap.CompressFormat.PNG, 85, fOut); 
     bm.compress(Bitmap.CompressFormat.PNG,100,fOut); 
     fOut.flush(); 
     fOut.close(); 
     Toast.makeText(this, "Saved in gallery", Toast.LENGTH_SHORT).show(); 
     try { 
      MediaPlayer mMediaPlayer = new MediaPlayer(); 
      mMediaPlayer = MediaPlayer.create(this, R.raw.shutter); 
      mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
      mMediaPlayer.setLooping(false); 
      mMediaPlayer.start(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     MediaScannerConnection.scanFile(this, new String[] { Environment.getExternalStorageDirectory().toString()+"/iScreenShot/"+tempFileName+num+extension }, null, 
       new MediaScannerConnection.OnScanCompletedListener() { 
        public void onScanCompleted(String path, Uri uri) { 
         Log.i("ExternalStorage", "Scanned " + path + ":"); 
         Log.i("ExternalStorage", "-> uri=" + uri); 
        } 
       }); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

Répondre

0

Utilisez cette méthode pour masquer la barre d'état ainsi que la barre de navigation avant setContentView

public void setFullScreenView() {//Hiding status/navigation bar 
     if (Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) { 
      View v = this.getWindow().getDecorView(); 
      v.setSystemUiVisibility(View.GONE); 
     } else if (Build.VERSION.SDK_INT >= 19) { 
      View decorView = getWindow().getDecorView(); 
      decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE 
        | View.SYSTEM_UI_FLAG_FULLSCREEN 
        | View.SYSTEM_UI_FLAG_LAYOUT_STABLE 
        | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY 
        | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 
        | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); 
     } 
     setContentView(R.layout.main_activity); 
    } 

Ensuite, appelez votre méthode pour capture d'écran

+0

Ce code cacher que le bouton de navigation comme vue. INVISIBLE, je veux un bouton de navigation comme VIew.GONE pour que le contenu apparaisse ci-dessous ou ne prenne pas d'espace. –

+0

Et un autre problème que j'ai trouvé est qu'il ne se cache que pour la première fois après avoir cliqué sur une vue/écran tactile, il reste visible. –