Take a screenshot and save the android

I am a very new Android developer with a basic understanding of java. I undertook a big project and I ran into a problem that I can fix.

Basically my problem has three parts:

  • I need to take a screenshot of my layout. I can’t just use the built-in screenshot function, it needs to be done at the click of a button.

  • Then I need to crop the image so that the image is only an ImageView and a TextView that is on top of it. (If there is no easier way to do this?)

  • Finally, I need to save the cropped image to some kind of memory, be it an SD card, device memory or gallery (not preferable).

Any help is much appreciated, thanks a lot.

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/rl" tools:context=".Preview" > <ImageView android:id="@+id/imageView1" android:layout_width="fill_parent" android:layout_height="80dp" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:scaleType="centerCrop" android:src="@drawable/bottom_black" /> <Button android:id="@+id/button1" style="?android:attr/buttonStyleSmall" android:layout_width="wrap_content" android:layout_height="30dp" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_marginLeft="20dp" android:layout_marginTop="3dp" android:background="@android:color/transparent" android:onClick="bold" android:text="Edit" /> <ImageView android:id="@+id/imageView2" android:layout_width="300dp" android:layout_height="300dp" android:layout_alignParentLeft="true" android:layout_below="@+id/button1" android:src="@drawable/block" /> <ImageView android:id="@+id/imageView7" android:layout_width="80dp" android:layout_height="20dp" android:layout_alignParentTop="true" android:layout_alignTop="@+id/button1" android:layout_centerHorizontal="true" android:layout_marginTop="6dp" android:src="@drawable/logo_black" /> <ImageView android:id="@+id/imageView6" android:layout_width="40dp" android:layout_height="40dp" android:layout_alignParentRight="true" android:layout_alignTop="@+id/imageView2" android:layout_marginRight="10dp" android:src="@drawable/icon_fb_sel" /> <ImageView android:id="@+id/imageView5" android:layout_width="40dp" android:layout_height="40dp" android:layout_alignParentRight="true" android:layout_below="@+id/imageView6" android:layout_marginRight="10dp" android:layout_marginTop="10dp" android:src="@drawable/icon_twit_sel" /> <ImageView android:id="@+id/imageView4" android:layout_width="40dp" android:layout_height="40dp" android:layout_alignParentRight="true" android:layout_below="@+id/imageView5" android:layout_marginRight="10dp" android:layout_marginTop="10dp" android:src="@drawable/save" /> <ImageView android:id="@+id/imageView3" android:layout_width="40dp" android:layout_height="40dp" android:layout_alignBottom="@+id/imageView2" android:layout_alignParentRight="true" android:layout_marginRight="10dp" android:src="@drawable/icon_trash" /> <ImageButton android:id="@+id/imageButton1" android:layout_width="55dip" android:layout_height="44dip" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:layout_marginBottom="14dp" android:layout_marginLeft="35dp" android:layout_marginRight="50dp" android:layout_toLeftOf="@+id/imageView7" android:onClick="sendMessage" android:src="@drawable/icon_album" /> <ImageButton android:id="@+id/imageButton2" android:layout_width="55dip" android:layout_height="44dip" android:layout_alignTop="@+id/imageButton1" android:layout_marginLeft="-30dp" android:layout_toRightOf="@+id/imageButton1" android:maxHeight="44dp" android:maxWidth="55dp" android:src="@drawable/icon_new" /> <ImageButton android:id="@+id/imageButton4" android:layout_width="55dp" android:layout_height="44dp" android:layout_alignParentRight="true" android:layout_alignTop="@+id/imageButton2" android:layout_marginLeft="50dp" android:layout_marginRight="35dp" android:layout_toRightOf="@+id/imageView7" android:src="@drawable/icon_options" /> <ImageButton android:id="@+id/imageButton3" android:layout_width="55dip" android:layout_height="44dip" android:layout_alignTop="@+id/imageButton2" android:layout_marginRight="-30dp" android:layout_toLeftOf="@+id/imageButton4" android:maxHeight="44dp" android:maxWidth="55dp" android:minHeight="44dp" android:minWidth="55dp" android:src="@drawable/icon_edit" /> <TextView android:id="@+id/textView1" android:layout_width="297dp" android:layout_height="297dp" android:layout_alignBottom="@+id/imageView2" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_marginBottom="5dp" android:layout_marginLeft="3dp" android:layout_marginTop="30dp" android:text="text" android:textSize="65dp" /> </RelativeLayout> 

This is my xml code

+4
java android memory image screenshot
source share
2 answers
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

My layout

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/rl" tools:context=".MainActivity" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_marginBottom="70dp" android:text="Button" /> <ImageView android:id="@+id/imageView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="72dp" android:src="@drawable/afor" /> </RelativeLayout> 

My activity class

 public class MainActivity extends Activity { RelativeLayout rl; final int PIC_CROP = 1; ImageView iv; File file; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); rl = (RelativeLayout) findViewById(R.id.rl); Button b= (Button) findViewById(R.id.button1); iv= (ImageView) findViewById(R.id.imageView1); b.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { save(); } }); } public void save() { AlertDialog.Builder editalert = new AlertDialog.Builder(MainActivity.this); editalert.setTitle("Please Enter the name with which you want to Save"); final EditText input = new EditText(MainActivity.this); LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT); input.setLayoutParams(lp); editalert.setView(input); editalert.setPositiveButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { rl.setDrawingCacheEnabled(true); String name= input.getText().toString(); Bitmap bitmap =rl.getDrawingCache(); String root = Environment.getExternalStorageDirectory().toString(); File myDir = new File(root + "/MyDraw"); myDir.mkdirs(); file = new File (myDir, name+".png"); if (file.exists ()) file.delete (); try { if(!file.exists()) { file.createNewFile(); } FileOutputStream ostream = new FileOutputStream(file); bitmap.compress(CompressFormat.PNG, 10, ostream); ostream.close(); Uri uri = Uri.fromFile(new File(file.getAbsolutePath())); performCrop(uri); } catch (Exception e) { e.printStackTrace(); } } }); editalert.show(); } private void performCrop(Uri picUri) { try { Intent cropIntent = new Intent("com.android.camera.action.CROP"); // indicate image type and Uri cropIntent.setDataAndType(picUri, "image/*"); // set crop properties cropIntent.putExtra("crop", "true"); // indicate aspect of desired crop cropIntent.putExtra("aspectX", 1); cropIntent.putExtra("aspectY", 1); // indicate output X and Y cropIntent.putExtra("outputX", 128); cropIntent.putExtra("outputY", 128); // retrieve data on return cropIntent.putExtra("return-data", true); // start the activity - we handle returning in onActivityResult startActivityForResult(cropIntent, PIC_CROP); } // respond to users whose devices do not support the crop action catch (ActivityNotFoundException anfe) { // display an error message String errorMessage = "Whoops - your device doesn't support the crop action!"; Toast toast = Toast.makeText(MainActivity.this, errorMessage, Toast.LENGTH_SHORT); toast.show(); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == PIC_CROP) { if (data != null) { // get the returned data Bundle extras = data.getExtras(); // get the cropped bitmap Bitmap selectedBitmap = extras.getParcelable("data"); FileOutputStream ostream; try { ostream = new FileOutputStream(file); selectedBitmap.compress(CompressFormat.PNG, 10, ostream); ostream.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } iv.setImageBitmap(selectedBitmap); } } } 

snapshots

My snapshot layout

enter image description here

Click OK to enter a name to save

enter image description here

Image is cropped and saved openly in the gallery

enter image description here

Note. I saved the cropped image in the SD card. The size of the pictures depends on the size of the picture. This worked on my device. I posted the same thing. If anyone has a better idea, edit the above post.

Manifestfile

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.cropimagefromsdcard" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.cropimagefromsdcard.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> 
+3
source share

Hey, you can just use the code below to capture the screen in android and save it in cheers SD card, and then you can use it later

 // image naming and path to include sd card appending name you choose for file String mPath = Environment.getExternalStorageDirectory().toString() + "/" + ACCUWX.IMAGE_APPEND; // create bitmap screen capture Bitmap bitmap; View v1 = mCurrentUrlMask.getRootView(); v1.setDrawingCacheEnabled(true); bitmap = Bitmap.createBitmap(v1.getDrawingCache()); v1.setDrawingCacheEnabled(false); OutputStream fout = null; imageFile = new File(mPath); try { fout = new FileOutputStream(imageFile); bitmap.compress(Bitmap.CompressFormat.JPEG, 90, fout); fout.flush(); fout.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } 

Then, when you need to access, use something like this:

 Uri uri = Uri.fromFile(new File(mPath)); 
0
source share

All Articles