上次完成了《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方面其他技术支持、定制开发。
现在就进店看看
大家有什么不清楚的,可以给我留言或讨论。
以上信息对您有用的话请点赞收藏,就下面这行