我尝试了很多方法。我能够截取整个屏幕的截图,但我的要求是截取整个 HorizontalScrollView 并将其保存为图像文件。这是我正在使用的示例 XML 布局:
<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" >
<HorizontalScrollView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/hsv" >
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:orientation="horizontal"
android:id="@+id/ll">
<Button
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:onClick="click"
android:id="@+id/b"
android:text="capture"
android:layout_margin="20dp"/>
<ImageView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:id="@+id/img1"
android:src="@drawable/plug1"
android:layout_margin="20dp"/>
<ImageView
android:layout_height="wrap_content"
android:layout_width="200dp"
android:id="@+id/img2"
android:src="@drawable/plug3"
android:layout_margin="20dp"/>
</LinearLayout>
</HorizontalScrollView>
</RelativeLayout>
活动代码:
Button b;
ImageView img1, img2;
LinearLayout ll; View v;
HorizontalScrollView s;
int h,w;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
b = (Button)findViewById(R.id.b);
img1 = (ImageView)findViewById(R.id.img1);
img2 = (ImageView)findViewById(R.id.img2);
ll = (LinearLayout)findViewById(R.id.ll);
s = (HorizontalScrollView) findViewById(R.id.hsv);
s.setDrawingCacheEnabled(true);
}
//Fired onClick of the button
public void click(View v) {
shoot();
}
// To capture layout, create a bitmap and replace an image with the resulting bitmap.
public void shoot() {
s.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED);
int totalHeight = s.getMeasuredHeight();
int totalWidth = s.getMeasuredWidth();
s.layout(0, 0, totalHeight, totalWidth);
s.buildDrawingCache(true);
Bitmap b = Bitmap.createBitmap(s.getDrawingCache());
s.setDrawingCacheEnabled(false);
img1.setImageBitmap(b);
}
如果我不使用 MeasureSpec,我不会得到正确的布局高度和宽度。
OnClick of the button 我只得到半个按钮的图像。我认为这正在发生,因为我没有使用 ViewTreeObserver。但是当我使用 ViewTreeObserver 时,我没有得到结果。此外,当我单击按钮两次时应用程序崩溃 - 位图中的 NullPointerException。
我已经尝试了 StackOverFlow 上几乎所有可用的东西。请帮助我找到一种方法来做到这一点。甚至可能吗?