我需要拍摄一个屏幕截图并保存屏幕截图。我需要在不使用任何PC连接或不连接手机的情况下执行此操作。每当触发事件时我都需要这样做。例如,当一个广告在游戏中显示时......或者当游戏结束并以蛇形式显示分数时。您能告诉我如何才能做到这一点。我看到了一些tutorilas,他们给了代码,但似乎没有工作
private void getScreen()
{
View content = findViewById(R.id.layoutRoot);
Bitmap bitmap = content.getDrawingCache();
File file = new File("/sdcard/test.png");
try
{
file.createNewFile();
FileOutputStream ostream = new FileOutputStream(file);
bitmap.compress(CompressFormat.PNG, 100, ostream);
ostream.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
答案 0 :(得分:1)
在调用getDrawingCache()之前,您必须先enable the cache。
答案 1 :(得分:1)
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 + "");
}
答案 2 :(得分:0)
您是否可以提供有关运行该代码时不起作用的更多信息?它不能捕捉到你想要的东西吗?它会崩溃吗?
请确保使用根布局正确更改R.id.layoutroot
...除此之外它似乎可以正常工作......
<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>
编辑...
例如,如果您使用该布局,则应将R.id.layout
更改为R.id.snake
,因为此行:android:id="@+id/snake"
。
我认为没有一种简单的方法可以找到/获取视图“根”布局的ID(如果你想截取手机显示的任何内容的截图。
我刚刚检查了启动器和另一个应用程序,看起来大多数应用程序被放入带有id / content的FrameLayout中,所以你可以尝试使用android.R.id.content
,但是没有保证每次都可以使用它。