Android — taking a screen shot

后端 未结 3 450
后悔当初
后悔当初 2021-01-15 18:38

I need to take a screen shot and save the screen shot. I need to do this without using any connection to PC or without unrooting the phone. I need to do this whenever a even

相关标签:
3条回答
  • 2021-01-15 19:26

    Can you give more information as to what does not work when you run that code ? Does it not capture what you want ? Does it crash ?

    Make sure you change the R.id.layoutroot correctly with your root layout... Beside that it seems like it would work...

    <com.example.android.snake.SnakeView
     android:id="@+id/snake"
        android:layout_width="match_parent"
                android:layout_height="match_parent"
                tileSize="24"
                />
    
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    
        <TextView
         android:id="@+id/text"
            android:text="@string/snake_layout_text_text"
            android:visibility="visible"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:gravity="center_horizontal"
            android:textColor="#ff8888ff"
            android:textSize="24sp"/>
    </RelativeLayout>
    

    Edit...

    So for example, if you use that layout you just put there, you should change the R.id.layout into R.id.snake, that's because of this line : android:id="@+id/snake".

    I don't think there is an easy way to find /get the id of the "root" layout of a view (if you wanted to take screenshot of anything the phone is showing.

    I just checked the launcher and another application, seems like most app are placed into a FrameLayout with id/content, so you can try to use android.R.id.content, but there is no guaranty this will work every time...

    0 讨论(0)
  • 2021-01-15 19:39
    View ve = findViewById(R.id.loyout);
            ve.setDrawingCacheEnabled(true);
            Bitmap b = ve.getDrawingCache();
    
            String extr = Environment.getExternalStorageDirectory().toString()
                    + "/SaveCapture";
            myPath = new File(extr);
    
            if (!myPath.exists()) {
                boolean result = myPath.mkdir();
                Toast.makeText(this, result + "", Toast.LENGTH_SHORT).show();
            }
            myPath = new File(extr, getString(R.string.app_name) + ".jpg");
    
            Toast.makeText(this, myPath.toString(), Toast.LENGTH_SHORT).show();
            FileOutputStream fos = null;
    
            try {
                fos = new FileOutputStream(myPath);
    
                b.compress(Bitmap.CompressFormat.JPEG, 100, fos);
                fos.flush();
                fos.close();
                MediaStore.Images.Media.insertImage(getContentResolver(), b,
                        "Screen", "screen");
    
    
            }
    
            catch (FileNotFoundException e) {
    
                Log.e("Error", e + "");
            }
    
            catch (Exception e) {
    
                Log.e("Error", e + "");
            }
    
    0 讨论(0)
  • 2021-01-15 19:40

    You have to enable the cache first, before calling getDrawingCache().

    0 讨论(0)
提交回复
热议问题