mirror of
				https://gitee.com/csharpui/CPF.git
				synced 2025-11-01 00:46:56 +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;
 | |
|         }
 | |
|     }
 | |
| } | 
