Delphi D10.X安卓APP开发让原生Toast显示图片

Welcome ·
更新时间:2024-11-13
· 846 次阅读

上次完成了《Delphi D10.X安卓APP开发中简单使用原生Toast》,可以快速方便的使用Toast,并且可以自定义显示位置。在此基础上,今天我们来实现在Toast中显示图片的方式。

需要增加的内容

先增加一个可以显示图片的调用申明。

procedure Toast(const msg: string; duration: Integer; gravity: Integer; xOffset: Integer; yOffset: Integer; vBitmap: TBitmap); overload;

增加对应的功能过程:

procedure Toast(const msg: string; duration: Integer; gravity: Integer; xOffset: Integer; yOffset: Integer; vBitmap: TBitmap); begin {$IFDEF ANDROID} CallInUiThread( procedure var vToast: JToast; vImageView: JImageView; vLinearLayout: JLinearLayout; begin vToast := TJToast.JavaClass.makeText(TAndroidHelper.Activity, StrToJCharSequence(msg), duration); vToast.setGravity(gravity, xOffset, yOffset); if Assigned(vBitmap) then begin // 创建图片显示 vImageView := TjImageView.JavaClass.init(TAndroidHelper.Context); vImageView.setImageBitmap(BitmapToJBitmap(vBitmap)); vLinearLayout := TJLinearLayout.Wrap(vToast.getView); vLinearLayout.addView(vImageView, 0); end; vToast.show; end); {$ENDIF} end; 调用方式: Toast('居中,显示图片',TToastLength.ShortToast,TGravity.CENTER,0,0, Image1.Bitmap); 运行后的效果:

在这里插入图片描述

全部代码

这是u_Toast.pas的全部代码,可以复制后生成一个文件使用。因为是新增加了一些内容,就没上传到下载里了。

unit u_Toast; interface uses System.SysUtils, System.Types, System.Classes, FMX.Graphics,FMX.Surfaces {$IFDEF ANDROID} , FMX.Helpers.Android, Androidapi.JNI.app, Androidapi.JNIBridge, Androidapi.JNI.JavaTypes, Androidapi.Helpers, Androidapi.JNI.Widget, Androidapi.JNI.GraphicsContentViewText {$ENDIF} ; type /// /// Toast显示时间 /// TToastLength = record const ShortToast = 0; LongToast = 1; end; /// /// Toast显示位置 /// TGravity = record const AXIS_CLIP = 8; AXIS_PULL_AFTER = 4; AXIS_PULL_BEFORE = 2; AXIS_SPECIFIED = 1; AXIS_X_SHIFT = 0; AXIS_Y_SHIFT = 4; BOTTOM = 80; CENTER = 17; CENTER_HORIZONTAL = 1; CENTER_VERTICAL = 16; CLIP_HORIZONTAL = 8; CLIP_VERTICAL = 128; DISPLAY_CLIP_HORIZONTAL = 16777216; DISPLAY_CLIP_VERTICAL = 268435456; &END = 8388613; FILL = 119; FILL_HORIZONTAL = 7; FILL_VERTICAL = 112; HORIZONTAL_GRAVITY_MASK = 7; LEFT = 3; NO_GRAVITY = 0; RELATIVE_HORIZONTAL_GRAVITY_MASK = 8388615; RELATIVE_LAYOUT_DIRECTION = 8388608; RIGHT = 5; START = 8388611; TOP = 48; VERTICAL_GRAVITY_MASK = 112; end; /// /// 显示安卓原生Toast /// /// 需要显示的内容 /// 显示时间长短 procedure Toast(const msg: string; duration: Integer = TToastLength.ShortToast); overload; /// /// 显示安卓原生Toast /// /// 需要显示的内容 /// 显示时间长短 /// 显示的位置 /// 坐标设置 procedure Toast(const msg: string; duration: Integer; gravity: Integer; xOffset: Integer; yOffset: Integer); overload; /// /// 显示安卓原生Toast 有图片的 /// /// 需要显示的内容 /// 显示时间长短 /// 显示的位置 /// 坐标设置 /// 需要显示的图片 procedure Toast(const msg: string; duration: Integer; gravity: Integer; xOffset: Integer; yOffset: Integer; vBitmap: TBitmap); overload; implementation {$IFDEF ANDROID} function BitmapToJBitmap(Bmp: TBitmap): JBitmap; var mBitmap: JBitmap; Surface: TBitmapSurface; begin Surface := TBitmapSurface.Create; Surface.Assign(Bmp); mBitmap := TJBitmap.JavaClass.createBitmap(Bmp.Width, Bmp.Height, TJBitmap_Config.JavaClass.ARGB_8888); if SurfaceToJBitmap(Surface, mBitmap) then Result := mBitmap; end; {$ENDIF} procedure Toast(const msg: string; duration: Integer = TToastLength.ShortToast); begin {$IFDEF ANDROID} CallInUiThread( procedure begin TJToast.JavaClass.makeText(TAndroidHelper.Activity, StrToJCharSequence(msg), duration).show; end); {$ENDIF} end; procedure Toast(const msg: string; duration: Integer; gravity: Integer; xOffset: Integer; yOffset: Integer); begin Toast(msg, duration, gravity, xOffset, yOffset, nil); end; procedure Toast(const msg: string; duration: Integer; gravity: Integer; xOffset: Integer; yOffset: Integer; vBitmap: TBitmap); begin {$IFDEF ANDROID} CallInUiThread( procedure var vToast: JToast; vImageView: JImageView; vLinearLayout: JLinearLayout; begin vToast := TJToast.JavaClass.makeText(TAndroidHelper.Activity, StrToJCharSequence(msg), duration); vToast.setGravity(gravity, xOffset, yOffset); if Assigned(vBitmap) then begin // 创建图片显示 vImageView := TjImageView.JavaClass.init(TAndroidHelper.Context); vImageView.setImageBitmap(BitmapToJBitmap(vBitmap)); vLinearLayout := TJLinearLayout.Wrap(vToast.getView); vLinearLayout.addView(vImageView, 0); end; vToast.show; end); {$ENDIF} end; end. 相关文章导读

Delphi D10.X安卓APP开发中简单使用原生Toast》这是上一篇的内容,也是这篇的基础。
点击上面标题后直接查看

之前的文章《Delphi D10.X安卓APP开发中简单使用原生Toast》有Demo与代码,可以在“Delphi开发安卓APP中使用原生Toast”下载,但不包括显示图片的内容。可自行把今天的内容增加上。

欢迎光顾本人小店:(https://shop63778938.taobao.com/)
小店也提供delphi方面其他技术支持、定制开发。

现在就进店看看

大家有什么不清楚的,可以给我留言讨论
以上信息对您有用的话请点赞收藏,就下面这行


作者:tanqth



图片 d1 toast delphi app

需要 登录 后方可回复, 如果你还没有账号请 注册新账号