zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

android脚步---将layout和其输出一起保存成图片

Android输出 图片 --- 保存 一起 layout 脚步
2023-09-14 08:59:07 时间
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;