如何在两个activity之间传递bitmap
1、需求
在项目开发过程中,打印小票前需要添加打印预览功能,交易数据在打印前转成bitmap然后直接打印,为了显示这个bitmap需要将其传给显示activity。
2、解决方法
把bitmap存储为byte数组,然后再通过Intent传递。
3、XML布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"> <include layout="@layout/header_layout" /> <LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="455dp"
android:layout_weight="1">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="25dp"
android:layout_marginLeft="18dp"
android:layout_marginRight="17.5dp"
android:src="@drawable/print_preview"/> <ImageView
android:id="@+id/printPreview"
android:layout_width="match_parent"
android:layout_height="385dp"
android:layout_marginTop="60dp"
android:layout_marginLeft="61.5dp"
android:layout_marginRight="61dp"/>
</RelativeLayout> <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0"
android:orientation="horizontal">
<Button
android:id="@+id/cancel_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/selection_button_gray_left"
android:text="Cancel"
android:textColor="@color/cancel_button_text"/>
<Button
android:id="@+id/print_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/selection_button_blue_right"
android:text="Print"
android:textColor="@color/key_normal_color"/>
</LinearLayout>
</LinearLayout> </LinearLayout>

4、生成bitmap
public class ReceiptPreviewTrans {
public Bitmap preview(TransData transData){
ReceiptGeneratorTrans receiptGeneratorTrans = new ReceiptGeneratorTrans(transData, 1, 1, false);
return receiptGeneratorTrans.generate();
}
}
5、ActionPrintPreview实现
public class ActionPrintPreview extends AAction {
private Context context;
private Handler handler;
private TransData transData;
public ActionPrintPreview(ActionStartListener listener) {
super(listener);
}
public void setParam(Context context, Handler handler, TransData transData) {
this.context = context;
this.handler = handler;
this.transData = transData;
}
@Override
protected void process() {
ReceiptPreviewTrans receiptPreviewTrans = new ReceiptPreviewTrans();
Bitmap bitmap = receiptPreviewTrans.preview(transData);
Intent intent = new Intent(context, PrintPreviewActivity.class);
ByteArrayOutputStream baos=new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
byte [] bitmapByte =baos.toByteArray();
intent.putExtra("bitmap", bitmapByte);
context.startActivity(intent);
}
}
6、PrintPreviewActivity实现
public class PrintPreviewActivity extends BaseActivityWithTickForAction implements View.OnClickListener{
private TextView headerText;
private ImageView backBtn;
private Bitmap bitmap;
private byte [] bis;
private ImageView imageView;
private Button btnCancel;
private Button btnPrint;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Device.enableStatusBar(false);
}
@Override
protected void onResume() {
super.onResume();
}
@Override
protected void loadParam() {
Intent intent=getIntent();
if(intent !=null)
{
bis=intent.getByteArrayExtra("bitmap");
bitmap= BitmapFactory.decodeByteArray(bis, 0, bis.length);
}
}
@Override
protected int getLayoutId() {
return R.layout.activity_print_preview_layout;
}
@Override
protected void initViews() {
headerText = (TextView) findViewById(R.id.header_title);
headerText.setText(R.string.preview);
backBtn = (ImageView) findViewById(R.id.header_back);
backBtn.setVisibility(View.GONE);
imageView = (ImageView)findViewById(R.id.printPreview);
imageView.setImageBitmap(bitmap);
btnCancel = (Button)findViewById(R.id.cancel_button);
btnPrint = (Button)findViewById(R.id.print_button);
}
@Override
protected void setListeners(){
btnCancel.setOnClickListener(this);
btnPrint.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.cancel_button:
break;
case R.id.print_button:
finish(new ActionResult(TransResult.SUCC, null));
break;
default:
break;
}
}
@Override
protected void handleMsg(Message msg) {
}
public void finish(ActionResult result) {
tickTimerStop();
AAction action = TransContext.getInstance().getCurrentAction();
if (action != null) {
action.setResult(new ActionResult(TransResult.SUCC, result.getData()));
} else {
finish();
}
}
}
7、效果图

如何在两个activity之间传递bitmap的更多相关文章
- 【转】 android之如何在两个activity之间传递handler_利用broadcast广播机制
原文:http://blog.csdn.net/jason0539/article/details/18075293 这算是如何在两个activity之间传递handler的解决方案二了,解决方案一见 ...
- 两个activity之间传递数据用startActivityForResult方法。
package com.example.testactivityresquest; import android.app.Activity; import android.content.Intent ...
- Android基础 -- Activity之间传递数据(bitmap和map对象)
原文:http://blog.csdn.net/xueerfei008/article/details/23046341 做项目的时候需要用到在2个activity之间传递一些数据,之前做的都是些字符 ...
- 不同Activity之间传递线程
场景:Android由Activiy A创建Activiy B时 ,A创建的线程B中依然需要调用,这时候需要在两个activity之间传递线程的信息. 解决: 方式一:线程自己维护自己的静态句柄(比较 ...
- Activity之间传递数据的方式及常见问题总结
Activity之间传递数据一般通过以下几种方式实现: 1. 通过intent传递数据 2. 通过Application 3. 使用单例 4. 静态成员变量.(可以考虑 WeakReferences) ...
- 大叔也说Xamarin~Android篇~Activity之间传递数组
回到目录 我们在开发应用程序时,不可能只使用一个Layout或者一个Activity,比如你个管理系统,要求用户先登陆然后再使用,这时你至少要有两个activity吧,先登陆一个,然后成功后需要跳到别 ...
- Android中如何使用Intent在Activity之间传递对象[使用Serializable或者Parcelable]
http://blog.csdn.net/cjjky/article/details/6441104 在Android中的不同Activity之间传递对象,我们可以考虑采用Bundle.putSeri ...
- 如何实现两个Activity 之间如何通讯
<转> 今天主要学习了Activity 组件,在这里作一下总结 1,学习如何创建Activity 创建 Activity 要点: (1) 一个Activity就是一个类,并且这个类要继承A ...
- Android学习总结——Activity之间传递参数
核心内容:一.在 Activity 之间传递简单数据二.在 Activity 之间传递复杂数据 三.在 Activity 之间传递自定义值对象 软件环境:Android Studio 一.在 ...
随机推荐
- HDMI IP学习笔记
在HDMI的IP核中点击,生成例子.找到./simulaion/mentor文件夹,把modelsim路径转到该路径下,即可仿真.
- 转:Unknown module(s) in QT: multimedia
在编写串口时遇到了以下问题:Unknown module(s) in QT: multimedia 在ubuntu中解决方法如下: qtmultimedia5-de sudo apt-get inst ...
- Python SQLAlchemy --1
本文為 Python SQLAlchemy ORM 一系列教學文: SQLAlchemy 大概是目前 Python 最完整的資料庫操作的套件了,不過最令人垢病的是它的文件真的很難閱讀,如果不搭配個實例 ...
- 制作Nine-Patch图片的流程
1.找到draw9patch.bat文件,在Android sdk目录下的tools文件夹中. 2.双击打开draw9patch.bat文件,在导航栏点击File->Open 9-patch将图 ...
- 实现type函数用于识别标准类型和内置对象类型
function type(obj){ return Object.prototype.toString.call(obj).slice(8,-1); } var t=type(new Number( ...
- redis 数据类型
上一篇文章主要写了redis在linux下的安装,这里讲一下redis基本的数据类型,linux的数据类型比较丰富,主要有五种数据类型 .String 字符串类型 常用命令: 除了get.set.in ...
- DIV+CSS常用的网页布局代码
单行一列以下是引用片段:body { margin: 0px; padding: 0px; text-align: center; }#content { margin-left:auto; marg ...
- WebApi Put方法出现MethodNotAllowed解决方法
WebApi Put方法提交数据的时候总提示MethodNotAllowed,在网上查了很多资料才发现是因为IIS安装了一项服务“WebDAV”,在IIS中把“WebDAV”前面的勾去掉,重新启动电脑 ...
- 【转载】PHP 开发者该知道的 5 个 Composer 小技巧
Composer是新一代的PHP依赖管理工具.其介绍和基本用法可以看这篇<Composer PHP依赖管理的新时代>.本文介绍使用Composer的五个小技巧,希望能给你的PHP开发带来方 ...
- CodeSmith Generator 7.0.2激活步骤
地址是:http://www.cnblogs.com/dunitian/p/4096917.html