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的更多相关文章

  1. 【转】 android之如何在两个activity之间传递handler_利用broadcast广播机制

    原文:http://blog.csdn.net/jason0539/article/details/18075293 这算是如何在两个activity之间传递handler的解决方案二了,解决方案一见 ...

  2. 两个activity之间传递数据用startActivityForResult方法。

    package com.example.testactivityresquest; import android.app.Activity; import android.content.Intent ...

  3. Android基础 -- Activity之间传递数据(bitmap和map对象)

    原文:http://blog.csdn.net/xueerfei008/article/details/23046341 做项目的时候需要用到在2个activity之间传递一些数据,之前做的都是些字符 ...

  4. 不同Activity之间传递线程

    场景:Android由Activiy A创建Activiy B时 ,A创建的线程B中依然需要调用,这时候需要在两个activity之间传递线程的信息. 解决: 方式一:线程自己维护自己的静态句柄(比较 ...

  5. Activity之间传递数据的方式及常见问题总结

    Activity之间传递数据一般通过以下几种方式实现: 1. 通过intent传递数据 2. 通过Application 3. 使用单例 4. 静态成员变量.(可以考虑 WeakReferences) ...

  6. 大叔也说Xamarin~Android篇~Activity之间传递数组

    回到目录 我们在开发应用程序时,不可能只使用一个Layout或者一个Activity,比如你个管理系统,要求用户先登陆然后再使用,这时你至少要有两个activity吧,先登陆一个,然后成功后需要跳到别 ...

  7. Android中如何使用Intent在Activity之间传递对象[使用Serializable或者Parcelable]

    http://blog.csdn.net/cjjky/article/details/6441104 在Android中的不同Activity之间传递对象,我们可以考虑采用Bundle.putSeri ...

  8. 如何实现两个Activity 之间如何通讯

    <转> 今天主要学习了Activity 组件,在这里作一下总结 1,学习如何创建Activity 创建 Activity 要点: (1) 一个Activity就是一个类,并且这个类要继承A ...

  9. Android学习总结——Activity之间传递参数

    核心内容:一.在 Activity 之间传递简单数据二.在 Activity 之间传递复杂数据 三.在 Activity 之间传递自定义值对象   软件环境:Android Studio   一.在 ...

随机推荐

  1. eclipse项目自动发布到tomcat目录,缺文件。

    eclipse项目自动发布到tomcat目录,缺文件. 解决方案: 项目--Properties-->Deployment Assembly-->Add--> Folder Add- ...

  2. CodeFirst进行数据迁移之添加字段

    一.为模型更改设置 Code First 数据迁移 1.工具->库程序包管理器->程序包管理器控制台->输入"Enable-Migrations"  或者 Ena ...

  3. SVN服务器与测试服务器代码同步

    在本地做测试项目的时候,想svn提交和服务器上的代码一步到位,不想再手动更新一次了,所以就研究了下同步, 要实现svn提交后自动更新到测试服务器,在你的版本库下的hooks文件夹下添加post-com ...

  4. js+cookie 购物车

    $(function () { //var ctx = new Ch(); //ctx.Clear(); //$.cookie(ctx.cookieName, ""); //ale ...

  5. 数组 Arrays类

    1.数组是一组变量集合,用来存储相同数据类型的一组数据的连续的空间. *数组名(标识符)连续空间首地址. *元素下标标明元素在数组中的位置,从0开始. *每个元素都可以通过下标来访问. *数组长度固定 ...

  6. python splinter

    from splinter.browser import Browser with Browser() as b: for url,name in web: b.visit(url) b.fill(' ...

  7. PHP单引号和双引号对待变量的不同

    如果一个变量放在单引号中,会被当作字符串来处理,如果是放在双引号中,则会被当值一个变量来处理(此时可以用 {}扩起来,也可以不用). <?php $txt = "hello, this ...

  8. 关闭ctrl+shift+d截图

    关闭ctrl+shift+d截图,最近用sublime text3的时候,用ctrl+shift+d,总是跳出来截图,找了半天,原来是百度浏览器的截图功能快捷键是ctrl+shift+d, 关掉即可

  9. 使用phar上线你的代码包

    在我前一阵子写的一篇文章<新版 SegmentFault 重构之系统架构>中,很多人对其中提到的利用phar上线代码比较感兴趣,我就在这边跟大家分享下我目前的做法. 哪些项目适合phar打 ...

  10. [erlang]supervisor(监控树)的重启策略

    1. init函数 init() -> {ok, {SupFlags, [ChildSpec,...]}} | ignore. [ChildSpec,...] 是在init之后默认要启动的子进程 ...