mirror of
https://gitee.com/csharpui/CPF.git
synced 2025-04-04 23:39:26 +08:00
117 lines
3.7 KiB
C#
117 lines
3.7 KiB
C#
using Android.App;
|
|
using Android.Content;
|
|
using Android.OS;
|
|
using Android.Runtime;
|
|
using Android.Views;
|
|
using Android.Graphics.Drawables;
|
|
using Android.Widget;
|
|
using CPF.Drawing;
|
|
using CPF.Platform;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using CPF.Controls;
|
|
|
|
namespace CPF.Android
|
|
{
|
|
class NativeImpl : AbsoluteLayout, INativeImpl
|
|
{
|
|
public NativeImpl() : base(CpfActivity.CurrentActivity)
|
|
{
|
|
//AddView(new global::Android.Widget.Button(CpfActivity.CurrentActivity) { Text= "原生控件" });
|
|
}
|
|
|
|
public void SetBackColor(Color color)
|
|
{
|
|
base.Background = new ColorDrawable(global::Android.Graphics.Color.Argb(color.A, color.R, color.G, color.B));
|
|
}
|
|
|
|
Rect clipRect;
|
|
bool isVisible;
|
|
int width;
|
|
int height;
|
|
int left;
|
|
int top;
|
|
public void SetBounds(Rect boundsRect, Rect clip, bool visible)
|
|
{
|
|
if (visible)
|
|
{
|
|
var l = (int)(boundsRect.Left * parent.RenderScaling + (parent as IViewImpl).Position.X);
|
|
var t = (int)(boundsRect.Top * parent.RenderScaling + (parent as IViewImpl).Position.Y);
|
|
var w = (int)(boundsRect.Width * parent.RenderScaling);
|
|
var h = (int)(boundsRect.Height * parent.RenderScaling);
|
|
//Layout(l, t, l + w, t + h);
|
|
if (isVisible != visible || clipRect != clip || top != t || l != left || height != h || width != w)
|
|
{
|
|
top = t;
|
|
left = l;
|
|
height = h;
|
|
width = w;
|
|
if (!(parent.GeneralView.softKeyboardListner._wasKeyboard && parent.GeneralView.softKeyboardListner.viewImpl != null))
|
|
{
|
|
this.Visibility = ViewStates.Visible;
|
|
var margin = new LayoutParams(w, h, l, t);
|
|
LayoutParameters = margin;
|
|
//parent.CpfView.UpdateViewLayout(this, margin);
|
|
|
|
if (!float.IsInfinity(clip.Width) && !float.IsInfinity(clip.Height) && clipRect != clip)
|
|
{
|
|
clipRect = clip;
|
|
base.ClipBounds = new global::Android.Graphics.Rect((int)(clip.X * parent.RenderScaling), (int)(clip.Y * parent.RenderScaling), (int)(clip.Right * parent.RenderScaling), (int)(clip.Bottom * parent.RenderScaling));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
this.Visibility = ViewStates.Gone;
|
|
}
|
|
isVisible = visible;
|
|
}
|
|
|
|
object content;
|
|
public void SetContent(object content)
|
|
{
|
|
if (content is global::Android.Views.View view)
|
|
{
|
|
this.AddView(view);
|
|
}
|
|
else
|
|
{
|
|
if (this.content is global::Android.Views.View old)
|
|
{
|
|
this.RemoveView(old);
|
|
}
|
|
}
|
|
this.content = content;
|
|
}
|
|
|
|
public void SetOwner(NativeElement owner)
|
|
{
|
|
|
|
}
|
|
ISurfaceView parent;
|
|
|
|
object INativeImpl.Handle => this;
|
|
|
|
public void SetParent(IViewImpl parent)
|
|
{
|
|
if (parent != null)
|
|
{
|
|
if (parent is AndroidView popup)
|
|
{
|
|
popup.CpfView.AddView(this);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (this.parent != null)
|
|
{
|
|
this.parent.CpfView.RemoveView(this);
|
|
}
|
|
}
|
|
this.parent = parent as ISurfaceView;
|
|
}
|
|
}
|
|
} |