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;

时间: 2024-11-14 13:21:44

android脚步---将layout和其输出一起保存成图片的相关文章

android脚步---设置layout隐藏属性

设置layout的属性,应用到android view的setVisibility 有三个值 visibility  VISIBLE, INVISIBLE, GONE. 可见的     不可见的      不可见的,而且不占用布局空间 Java代码   // 设置显示 tv_main_title.setVisibility(View.VISIBLE); // 设置不显示也不占用空间 tv_main_title.setVisibility(View.GONE); // 设置不显示但占用空间 tv_

Android五大布局Layout

 Android开发中,我们可能会遇到过一些很复杂的布局,对于初学者来说,可能脑子会嗡的一下,"这么复杂!该怎么整?!". 不要担心!再复杂的布局其实也是由简单地布局组成的,我们要学会将它分解成基本的布局,那么问题就迎刃而解了. Android共有五种常见布局方式,分别是:LinearLayout(线性布局),FrameLayout(单帧布局),AbsoluteLayout(绝对布局),RelativeLayout(相对布局),TableLayout(表格布局). 下面首先看一下这

Android measure和layout的一点理解

首先,推荐文章,http://blog.csdn.net/hqdoremi/article/details/9980481,http://www.docin.com/p-571954086.html 我理解measure的作用有2个:一个就是调用子view的measure函数,生成他们的高度和宽度,以便在自己的layout阶段参考:另一个是为父view提供关于自己的测量的width和height(这个宽度和高度往往和子view的测量高度和宽度有关),以便父view在layout阶段参考. lay

Android - HelloWorld的Layout内容

Android - HelloWorld的Layout内容 本文地址: http://blog.csdn.net/caroline_wendy 作为最基础的Android程序, HelloWorld的XML文件能够作为測试使用. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools&q

学习Android之第八个小程序文件保存(Notification、AndroidTestCase)

效果图:       .java文件有MainActivity.java.FileService.java.FileServiceTest.java, .xml文件有activity_main.xml. 本次注重AndroidTestCase类的使用,在开发中非常实用.用于测试某一功能. 使用AndroidTestCase类,有如下的要求: 1.在AndroidManifest.xml文件中,<manifest></manifest>中添加如下: <instrumentati

Android(java)学习笔记238:多媒体之图片画画板案例

1.首先我们编写布局文件activity_main.xml如下: 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4 android:layout_height=&

Android上传图片之调用系统拍照和从相册选择图片

Android上传图片之调用系统拍照和从相册选择图片 前言: 万丈高楼平底起,万事起于微末.不知不觉距离上篇博文已近四个月,2015年12月17日下午发了第一篇博文,现在是2016年4月6日.时间间隔长的过分啊,我自己都看不下去了.原因呢?当然是自己的原因,其实是有很多时间来些博客的,但是这些时间都花在DOTA上了(还是太年轻啊).请原谅我的过错--. 一.概述: 现在几乎应用都会用到上传图片的功能,而要上传图片,首先得选择图片,本文不针对如何上传图片到服务器(每个项目与服务器交互的方式不同,因

Android View转换成图片保存

package zhangphil.viewtoimage; import java.io.File; import java.io.FileOutputStream; import android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.view.View; import android.widget.Button; import android.widget.Tex

【android】把view保存为图片的方法以及解决保存后图片背景变黑色的问题

上代码: public class MainActivity extends Activity { ImageView imgView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imgView = (ImageView) findViewById(R.id.im