如何在两个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 一.在 ...
随机推荐
- C# 解析 Json数据
JSON(全称为JavaScript Object Notation) 是一种轻量级的数据交换格式.它是基于JavaScript语法标准的一个子集. JSON采用完全独立于语言的文本格式,可以很容易在 ...
- iOS 键盘类型
版权声明:本文为博主原创文章.请尊重作者劳动成果,转载请注明出处. UIKeyboardTypeDefault: UIKeyboardTypeASCIICapable: UIKeyboardTypeN ...
- js- this
this对象是基于函数在执行的环境绑定的. (一) this 在闭包环境中指向的对象. <Js高级程序设计>中提到: 每个函数在被调用时,其活动对象都会自动取得两个特殊变量:this和 ...
- unity3d笔记:控制特效的播放速度
一般在游戏中,主角或者怪物会受到减速效果,或者攻击速度减慢等类似的状态.本身动作减速的同时,衔接在角色上的特效也需要改变相应的播放速度.一般特效有三个游戏组件: 关键点就是改变Ani ...
- yum源配置与使用
一.yum 简介 yum,是Yellow dog Updater, Modified 的简称,是杜克大学为了提高RPM 软件包安装性而开发的一种软件包管理器.起初是由yellow dog 这一发行版的 ...
- CSS换行文本溢出显示省略号,多行
首先,div部分 <body> <div>多行的显示该如何解决呢,后面经过一番google后,我找到了chrome的一个API可以解决上面提到的需求-webkit-line-c ...
- DSP(2) -- 离散时间信号的序列运算
1.信号相加:这是一种对应的样本与样本之间的相加. 在Matlab中它可用算术运算符“+”实现,然后x1和x2的长度必须相等.如果序列不等,或者长度虽然相等但采样的位置不同,就不能用运算符“+”了.我 ...
- C# 反转字符串方法
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 反转字符 ...
- 来自MarsEdit的博客测试
使用MarsEdit编辑的第一个测试博客. 希望我们一帆风顺! 插图,在插图时可以调整尺寸: 六种公式写法,记得要在选项中打开-启用数学公式: \begin{equation}\sum\end{e ...
- css中图片等比例缩放
li img{ display: inline-block; max-height: 60px; max-width: 60px; vertical-align: middle; }