WebView 判断放大缩小操作

using Android.App;
using Android.Widget;
using Android.OS;
using Android.Content;
using Android.Runtime;
using Android.Net;
using Microsoft.International.Converters.PinYinConverter;
using System;
using System.Text;
using Android.Webkit;
using Android.Views;
using System.Collections.Generic;

namespace android_filepiker_demo_test
{
    [Activity(Label = "android_filepiker_demo_test", MainLauncher = true, Icon = "@drawable/icon")]
    public class MainActivity : Activity
    {
        public class WebViewTouchParameter
        {
            public double Distance { get; set; }
            public int FontSize { get; set; }
            public int MinFontSize { get; set; }
            public int MaxFontSize { get; set; }
        }

        public delegate void FontSizeChanged(int fontSize);

        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);
            SetContentView(Resource.Layout.Main);

            var button1 = FindViewById<Button>(Resource.Id.button1);
            button1.Click += Button1_Click;

            var web1 = FindViewById<WebView>(Resource.Id.web1);
            web1.Touch += Web1_Touch;
            web1.LoadData("<html><body style='font-size:12px;'><h1>abcde</h1></body></html>", "text/html", "utf-8");
        }

        private void Web1_Touch(object sender, Android.Views.View.TouchEventArgs e)
        {
            WebViewTouchHandler(e, new WebViewTouchParameter { MinFontSize = 12, MaxFontSize = 50 }, delegate(int fontSize) 
            {
                var web1 = FindViewById<WebView>(Resource.Id.web1);
                web1.LoadDataWithBaseURL(null, "<html><body style='font-size:" + fontSize + "px;'><h1>" + fontSize + "px,abcde</h1></body></html>", "text/html", "utf-8", null);
            });
        }
private void Button1_Click(object sender, System.EventArgs e)
        {

        }
    }
}

 

private void WebViewTouchHandler(Android.Views.View.TouchEventArgs e, WebViewTouchParameter p, FontSizeChanged fsc)
        {
            var ev = e.Event;
            var action = ev.Action;

            switch (action)
            {
                case MotionEventActions.Pointer2Down:
                    {
                        System.Diagnostics.Debug.Print("Pointer2Down");

                        p.Distance = Math.Abs(Math.Sqrt(Math.Pow(ev.GetX(0) - ev.GetX(1), 2)
                            + Math.Pow(ev.GetY(0) - ev.GetY(1), 2)));

                        break;
                    }
                case MotionEventActions.Move:
                    {
                        if (e.Event.PointerCount == 2)
                        {
                            var distance = Math.Abs(Math.Sqrt(Math.Pow(ev.GetX(0) - ev.GetX(1), 2)
                                    + Math.Pow(ev.GetY(0) - ev.GetY(1), 2)));

                            p.FontSize += (int)((distance - p.Distance) / 7);

                            if (p.FontSize > p.MaxFontSize)
                                p.FontSize = p.MaxFontSize;

                            if (p.FontSize < p.MinFontSize)
                                p.FontSize = p.MinFontSize;

                            if (fsc != null && Math.Abs(distance - p.Distance) > 7)
                                fsc(p.FontSize);

                            p.Distance = distance;
                        }

                        break;
                    }

                case MotionEventActions.Up:
                    {
                        break;
                    }

                case MotionEventActions.Cancel:
                    {
                        break;
                    }

                case MotionEventActions.Pointer2Up:
                    {
                        break;
                    }
            }
        }

此代码经过测试,可以稳定实现放大缩小。代码衔接调用处参数可能需要调试,最新优化调试后,我只更新了最后一段核心代码段。

posted on 2018-06-22 17:39  空明流光  阅读(293)  评论(0编辑  收藏  举报

导航