android脚步---将layout和其输出一起保存成图片
public void convertViewToBitmap(View view) { //View view = getLayoutInflater().inflate(R.layout.test_layout, null); view.setDrawingCacheEnabled(true); view.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight()); view.buildDrawingCache(); bitmap = view.getDrawingCache(); Date date = new Date(System.currentTimeMillis()); Storage.writeBitmapFile("/sdcard/DCIM/UUCamera/test"+date.toLocaleString()+".jpeg", bitmap); // Testbt.setVisibility(View.VISIBLE); view.destroyDrawingCache(); }
输入layout对应的vIEW然后进行操作,保存时应用了date,这样每张图片的保存名不同。
应该要注意的是view.measure和 view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());对layout重新进行计算高度和宽度,所以layout务必要封装好,不然会出现移位
以下面layout为例
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/screen" android:background="@drawable/test_bg" android:gravity="center_horizontal" android:orientation="vertical"> <RelativeLayout android:id="@+id/uupic" android:layout_width="304dp" android:layout_height="380dp" android:layout_marginTop="90dp" android:background="@drawable/test_photo_bg" android:gravity="center" > <ImageView android:id="@+id/myuupic" android:layout_width="264dp" android:layout_height="352dp"/> </RelativeLayout> <RelativeLayout android:id="@+id/lovepic" android:layout_height="116dp" android:layout_width="match_parent" > <TextView android:id="@+id/agetext" android:layout_width="120dp" android:layout_height="116dp" android:gravity="center" android:textColor="#ffffff" android:textSize="@dimen/age_text_size" android:background="@drawable/test_age_bg"/> <ImageView android:id="@+id/genderpic" android:layout_width="44dp" android:layout_height="44dp" android:layout_toRightOf="@+id/agetext" android:layout_alignParentBottom="true" android:layout_marginLeft="-30dp" android:scaleType="fitEnd"/> <ImageView android:id="@+id/testimg" android:layout_width="222dp" android:layout_height="86dp" android:layout_toRightOf="@+id/agetext" android:layout_alignParentBottom="true" /> </RelativeLayout> </LinearLayout> <!-- share and save layout --> <RelativeLayout android:id="@+id/testbt" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentBottom="true" android:layout_marginLeft="24dp" android:layout_marginRight="24dp" android:layout_marginBottom="20dp" > <Button android:id="@+id/save" android:layout_width="148dp" android:layout_height="40dp" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:background="@drawable/testbtstyle" android:text="保存" android:textColor="#ff4c6c" android:textSize="20sp" /> <Button android:id="@+id/share" android:layout_width="148dp" android:layout_height="40dp" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:background="@drawable/testbtstyle" android:text="分享" android:textColor="#ff4c6c" android:textSize="20sp" /> </RelativeLayout> </RelativeLayout>
封装成两部分上边显示,下边隐藏
引用时
mScreenShot = mTestView.findViewById(R.id.screen); public void convertViewToBitmap(View view) { //View view = getLayoutInflater().inflate(R.layout.test_layout, null); view.setDrawingCacheEnabled(true); view.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight()); view.buildDrawingCache(); bitmap = view.getDrawingCache(); Date date = new Date(System.currentTimeMillis()); Storage.writeBitmapFile("/sdcard/DCIM/UUCamera/test"+date.toLocaleString()+".jpeg", bitmap); // FileOutputStream fos = new FileOutputStream("/sdcard/DCIM/UUCamera/test.png"); //将Bitmap对象中的图像数据压缩成png格式的图像数据,并将这些数据保存在test.png文件中 // bitmap.compress(CompressFormat.PNG, 100, fos); //关闭文件输出流 // Testbt.setVisibility(View.VISIBLE); view.destroyDrawingCache(); if(!ispicsave()) { return; } } case R.id.save: LogMan.e(TAG,"save..."); if(mScreenShot!=null){ // Testbt.setVisibility(View.INVISIBLE); convertViewToBitmap(mScreenShot); } // Testbt.setVisibility(View.VISIBLE); break;