0

Ich erstellte Screenshot-Aktivität in programmatisch in android.using Bildlaufansicht der nach der Aufnahme Screenshot das Layout gestreckt sind. Ich gebe die Bilder für vor dem Nehmen, nachdem ich Schirmschuß genommen habe. This wird Ihnen helfen, mein Problem zu verstehen. Ich weiß nicht, wie man erzählt?nach dem Screenshot das Layout gestreckt sind

vor Bildschirm nehmen Schuss das Layout, image 1

nach Bildschirm nehmen Schuss das Layout

image 2

Sie den Unterschied von zwei images.The Aktivität wissen, nachdem Bildschirm erschossen es erweitert, ich weiß nicht, warum es passiert? Wie löst man das?

Mein Code:

public class MainActivity extends AppCompatActivity { 

    File cacheDir; 
    final Context context = this; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Button print = (Button) findViewById(R.id.btn_print); 

     print.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       takeScreenShot(); 
      } 
     }); 



    } 

     private void takeScreenShot() { 

     View u = findViewById(R.id.activity_main); 

     int spec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); 
     u.measure(spec, spec); 
     u.layout(0, 0, u.getMeasuredWidth(), u.getMeasuredHeight()); 

     Bitmap b = getBitmapFromView(u,u.getMeasuredHeight(),u.getMeasuredWidth()); 

     final String root = Environment.getExternalStorageDirectory().toString(); 

     File myPath = new File(root + "/saved_img"); 
     myPath.mkdirs(); 
     Random generator = new Random(); 
     int n = 10000; 
     n = generator.nextInt(n); 
     String fname = "Image-"+n+".jpg"; 
     File file = new File(myPath, fname); 
     FileOutputStream fos = null; 
     if(file.exists()) file.delete(); 
     try{ 
      fos = new FileOutputStream(file); 
      b.compress(Bitmap.CompressFormat.JPEG, 100, fos); 
      fos.flush(); 
      fos.close(); 


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

     Toast.makeText(this,"screen captured",Toast.LENGTH_SHORT).show(); 
    } 



    public Bitmap getBitmapFromView(View u, int totalHeight, int totalWidth){ 
     Bitmap returnedBitmap = Bitmap.createBitmap(totalWidth,totalHeight , Bitmap.Config.ARGB_8888); 
     Canvas canvas = new Canvas(returnedBitmap); 

     Drawable bgDrawable = u.getBackground(); 
     if (bgDrawable != null) 
      bgDrawable.draw(canvas); 
     else 
      canvas.drawColor(Color.WHITE); 
     u.draw(canvas); 
     return returnedBitmap; 
    } 
} 

xml:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/activity_main" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.own.scrollviewimg.MainActivity" 

    > 


    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     > 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="print" 
     android:id="@+id/btn_print" 
     /> 


    <ScrollView 
     android:id="@+id/horizontalscroll" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical" 
      > 


      <ImageView 
       android:layout_width="500dp" 
       android:layout_height="200dp" 
       android:src="@mipmap/ic_launcher" 
       /> 

       <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="@string/testdata" 
        android:textSize="25sp" 
        android:textStyle="bold" 
        /> 


       </LinearLayout> 

      </ScrollView> 


     </LinearLayout> 

</RelativeLayout> 
+0

posten Sie Ihren Code ... und das Layout XML-Datei – Akshay

+0

ok.just eine min.i mit Code meine Frage aktualisiert –

+0

überprüfen it.i meine Frage aktualisieren –

Antwort

0

versuchen diesen Code

private void takeScreenShot() { 
    Date now = new Date(); 
    android.text.format.DateFormat.format("yyyy-MM-dd_hh:mm:ss", now); 

    try { 
     String mPath = Environment.getExternalStorageDirectory().toString() + "/" + now + ".jpg"; 

     View v1 = getWindow().getDecorView().getRootView(); 
     v1.setDrawingCacheEnabled(true); 
     Bitmap bitmap = Bitmap.createBitmap(v1.getDrawingCache()); 
     v1.setDrawingCacheEnabled(false); 

     File imageFile = new File(mPath); 

     FileOutputStream outputStream = new FileOutputStream(imageFile); 
     int quality = 100; 
     bitmap.compress(Bitmap.CompressFormat.JPEG, quality, outputStream); 
     outputStream.flush(); 
     outputStream.close(); 

    } catch (Throwable e) { 
     e.printStackTrace(); 
    } 
} 
+0

dank Ihrer Antwort .aber ich fand die Lösung.danke .... –

0

In Ihrem takeScreenShot() Block, warum verwenden Sie View.MeasureSpec
Sie können view.getMeasuredHeight() und view.getMeasuredWidth() in die Höhe und Breite von der Wurzel Ansicht selbst verwenden und versuchen, auch von

View view = getWindow().getDecorView().getRootView(); 

Also einfach auf Kommentar

/* int spec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); 
    u.measure(spec, spec); 
    u.layout(0, 0, u.getMeasuredWidth(), u.getMeasuredHeight()); */ 

von bereits aufgeblasen Wurzel um die Ansicht zu erhalten und der Rest ist in Ordnung

Hinweis: Die Breite Ihres ImageView möglicherweise mehr als die aktuelle Bildschirmgröße

+0

danke Ihre Antwort.aber ich fand die Lösung.danke .... –

0

endlich fand ich die answer.it's simple.i einfach das Layout auf nach dem Klick klicken.

meine gelöste Antwort:

print.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       takeScreenShot(); 
       setContentView(R.layout.activity_main); 
      } 
     }); 
+0

überprüfen Sie Ihren Screenshot - es wäre nicht so, wie Sie erwartet hätten – shadygoneinsane

+0

+ das ist ein Workaround nicht eine richtige Lösung für Ihr Problem :) – shadygoneinsane

+0

ich bereits überprüft. & teilen Sie die Lösung .. –

Verwandte Themen