我有两个密切相关的主要问题.我从程序化的角度来看这些问题.
(1) – 我想截取SPECIFIC布局的内容,即嵌套在LinearLayout中的ScrollView.
(2) – 由于ScrollView具有溢出屏幕的内容(因此可以进行滚动),我该如何确保屏幕截图包含屏幕上不可见的元素?
这是我使用的当前代码块.它的工作是拍摄截图,但只能用于整个屏幕.即使是R.id.boss是ScrollView的ID,而不是主要的LinearLayout.
View view = findViewById(R.id.boss); View v = view.getRootView();// this does not seem to make a difference v.setDrawingCacheEnabled(true); v.measure(MeasureSpec.makeMeasureSpec(0,MeasureSpec.UNSPECIFIED),MeasureSpec.makeMeasureSpec(0,MeasureSpec.UNSPECIFIED)); v.layout(0,v.getMeasuredWidth(),v.getMeasuredHeight()); v.buildDrawingCache(true); Bitmap b = Bitmap.createBitmap(u.getDrawingCache()); v.setDrawingCacheEnabled(false);
提前致谢.
编辑:
我犯了一些错误.我使用了R.id.boss这是错误的资源.我现在可以单独浏览scrollview的屏幕截图,而不是屏幕外的部分.
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/boss" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_gravity="top" android:orientation="vertical" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="F" android:textAppearance="?android:attr/textAppearanceMedium" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Analyze via image URL" android:textAppearance="?android:attr/textAppearanceSmall" /> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" > <EditText android:id="@+id/mUrl" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="0.7" android:text="http://" > <requestFocus /> </EditText> <ImageView android:id="@+id/call" android:layout_width="75dp" android:layout_height="50dp" android:layout_weight="0.3" android:text="ABC" android:src="@drawable/run" /> </LinearLayout> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="ABC" android:textAppearance="?android:attr/textAppearanceSmall" /> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" > <EditText android:id="@+id/filepath" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="0.55" /> <ImageView android:id="@+id/cam" android:layout_width="75dp" android:layout_height="50dp" android:layout_weight="0.15" android:src="@drawable/cam" /> <ImageView android:id="@+id/browse" android:layout_width="75dp" android:layout_height="50dp" android:layout_weight="0.15" android:src="@drawable/folder" android:text="B" /> <ImageView android:id="@+id/upload" android:layout_width="75dp" android:layout_height="50dp" android:layout_weight="0.15" android:src="@drawable/run" android:text="A" /> </LinearLayout> <LinearLayout android:id="@+id/baba" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" > <ScrollView android:id="@+id/scroll" android:layout_width="fill_parent" android:layout_height="150dp" android:layout_weight="0.7" > <LinearLayout android:layout_width="fill_parent" android:layout_height="186dp" android:orientation="vertical" > <ImageView android:id="@+id/pic" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="Facial recognition" android:textAppearance="?android:attr/textAppearanceMedium" /> <TextView android:id="@+id/text3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="Small Text" android:textAppearance="?android:attr/textAppearanceSmall" /> <TextView android:id="@+id/avmarwe" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="Gender and age" android:textAppearance="?android:attr/textAppearanceMedium" /> <TextView android:id="@+id/text1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="Small Text" android:textAppearance="?android:attr/textAppearanceSmall" /> <TextView android:id="@+id/skahasd" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="Expression and mood" android:textAppearance="?android:attr/textAppearanceMedium" /> <TextView android:id="@+id/text2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="Small Text" android:textAppearance="?android:attr/textAppearanceSmall" /> <TextView android:id="@+id/dsfsfs" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="Celebrity Facial Match" android:textAppearance="?android:attr/textAppearanceMedium" /> <TextView android:id="@+id/text4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="Small Text" android:textAppearance="?android:attr/textAppearanceSmall" /> </LinearLayout> </ScrollView> </LinearLayout> <LinearLayout android:id="@+id/linearLayout1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="bottom" > <Button android:id="@+id/c" android:layout_width="fill_parent" android:layout_height="50dp" android:layout_weight="0.7" android:text="" /> <Button android:id="@+id/share" android:layout_width="70dp" android:layout_height="50dp" android:layout_weight="0.3" android:text="" /> </LinearLayout> </LinearLayout>
解决方法
感谢你们,我终于发现了什么是错的.
查看v = view.getRootView();不应该被使用,因为它会调用我不想要的根视图.我错误地认为这没有什么不同,因为我输入错误的资源ID.
MeasureSpec以某种方式没有给出良好的宽度和高度的描述.所以我最后使用另一种方法:
... ScrollView z = (ScrollView) findViewById(R.id.scroll); int totalHeight = z.getChildAt(0).getHeight(); int totalWidth = z.getChildAt(0).getWidth(); u.layout(0,totalWidth,totalHeight); ...
由于ScrollView的总高度可以由单个子元素确定.
进行这些更改后,我现在可以截取一个嵌套的ScrollView及其所有内容的屏幕截图.对于任何有兴趣的人来说,这里是代码块,包括保存位图:
View u = findViewById(R.id.scroll); u.setDrawingCacheEnabled(true); ScrollView z = (ScrollView) findViewById(R.id.scroll); int totalHeight = z.getChildAt(0).getHeight(); int totalWidth = z.getChildAt(0).getWidth(); u.layout(0,totalHeight); u.buildDrawingCache(true); Bitmap b = Bitmap.createBitmap(u.getDrawingCache()); u.setDrawingCacheEnabled(false); //Save bitmap String extr = Environment.getExternalStorageDirectory().toString() + File.separator + "Folder"; String fileName = new SimpleDateFormat("yyyyMMddhhmm'_report.jpg'").format(new Date()); File myPath = new File(extr,fileName); 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) { // TODO Auto-generated catch block e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }