Flutter中的触摸事件

Flutter触摸魔法:深度揭秘触摸事件处理的艺术与实践* 在Flutter应用程序开发中,触摸事件处理是构建交互式用户界面的关键一环。作为一位资深的Flutter开发专家,我将深入解析如何在Flutter框架下高效地利用GestureDetector和其他相关组件捕捉并响应用户的触摸动作,包括点击、长按、拖动、缩放等多点触控场景。本文旨在通过理论讲解与实践示例相结合的方式,为您铺开一条清晰的触摸事件处理之路。 阅读详情

几乎每个应用程序都需要某种用户输入。通常,你的应用需要响应触摸事件。这是一个触摸事件的小指南,特别是对于启动Flutter开发人员。

在手势识别和对触摸事件的反应方面,Flutter为新开发人员提供了令人难以置信的小部件。你可以使应用中的任何微件响应触摸事件,只需将其包装在这些触摸识别小部件之一中即可。

无论您是刚刚了解有关Flutter上触摸事件管理的更多信息的开发人员,还是希望快速回顾的专业人士,本文都将帮助您快速掌握。

手势系统如何运作?

从本质上讲,Flutter中的手势系统在两个不同的层上运行。第一层存储描述物理细节的原始指针事件,例如正在使用的指针的位置和移动,例如测针、鼠标和触摸。

在此之上,我们有“手势”层。这会将指针移动解释为有意义的语义,并向指针移动添加上下文。

面向初学者的快速触摸事件词汇表

除非您了解语义手势和指针,否则无法处理触摸事件。指针是这个竞技场中的英雄!您将在下面看到这是如何实现的。
在我们探讨单个元素的反应之前,让我们看一下案例中涉及的特征:
指针
指针表示与用户与相关屏幕的交互相关的原始数据。有四种不同类型的指针事件:
PointerUpEvent: 指针已停止与屏幕交互。
PointerDownEvent:指针在特定位置与屏幕接触。
PointerMoveEvent:指针已移动到屏幕上的新位置。
PointerCancelEvent:此指针的输入不再指向正在进行的应用程序。
当您使用 时,框架将检查应用程序,以确定位于应用程序线框上该特定点的小部件。将调度到该小部件及其上方的小部件到组件树的根,在该特定路径上跟随 down 事件的任何事件也是如此。

手势

如前所述,手势表示语义操作(如点击、缩放和拖动),这些操作很容易从指针活动中出现的多个单独事件中识别出来。单个手势可能包含多个触摸事件,每个事件都处理手势的唯一里程碑,如拖动开始或拖动结束!

以下是 Flutter 触控事件管理中最常见的手势类型:
点按手势
onTapUp:指针会触发在屏幕上的特定位置的点击。
onTapDown:指针可能会导致在屏幕上联系过的点击。
onTap:当先前触发的指针也触发 时,它会导致点击。
onTapCancel:当指针触发不会导致点击时。
双击手势
onDoubleTap:用户快速连续点击同一位置的屏幕两次。
长按手势
onLongPress:指针与同一位置的屏幕保持接触的时间较长。
垂直拖动手势
onVerticalDragStart:指针接触屏幕,可能会垂直移动。
onVerticalDragEnd: 先前在垂直移动期间与屏幕接触的指针以与运动本身类似的速度结束与屏幕的接触。
onVerticalDragUpdate:与屏幕接触的指针沿同一方向垂直移动。
水平拖动手势
onHorizontalDragStart:指针接触屏幕,可能沿水平方向移动。
onHorizontalDragEnd:以前以特定速度水平移动以与屏幕接触的指针会完全失去接触。
onHorizontalDragUpdate:与屏幕接触的指针从onHorizontalDragStart水平移动。
平移手势
onPanStart:指针已接触屏幕,可能会在 X 轴或 Y 轴上移动。此回调在设置或已设置时导致崩溃 - 事件系统无法区分平移和拖动。
onPanEnd:与屏幕接触并以前以特定速度移动的指针会失去与屏幕的联系。
onPanUpdate:当前与屏幕接触并在水平或垂直方向上移动的指针。仅当设置了回调时,才会遇到崩溃。

了解手势消歧义

多个手势检测器可以出现在屏幕上的任何给定位置。它们都遵循流经的指针事件流的提示。在尝试识别特定手势时,小部件确定指定的语义手势,并根据其设置回调。因此,如果您在 上设置了某个回调,则小部件将尝试根据该类型的手势来解释指针事件。GestureDetectorGestureDetector

该框架消除了手势领域中的手势的歧义。每种类型的手势都有一个识别器,该识别器在竞技场中竞争,检查指针位置和传入的移动事件。与输入手势对应的识别器通过遵循以下几个规则获胜:

识别器可以随时宣布失败并离开竞技场。当只剩下一个识别器时,它就赢了!
识别器可以随时宣布胜利,并迫使其他人声称失败。
例如,假设您要识别垂直和水平拖动。每个方向的识别器将在收到第一个事件后立即进入手势竞技场。然后,他们将根据逻辑像素在任何给定方向上观察运动。

如果 move 事件主要垂直进行,则垂直识别器将由于交叉的逻辑像素而宣布胜利,并且手势将被解释为屏幕上的垂直拖动。对于水平拖动,也可以重复相同的一系列事件。

如果您只想识别水平拖动,那么运动是否有垂直组件并不重要;只有水平运动才会被识别。

在Flutter中编码触摸事件处理

在 Android 中工作时,您可以通过OnClicksetOnClickListener绑定来响应按钮点击。但是当涉及到Flutter时,您可以选择两种不同的方法来添加触摸听者。

如果小部件支持使用侦听器,则可以传递回调函数来处理事件。下面是代码示例:

onPressedRaisedButton
class BodyWidget extends StatelessWidget {
 
 
  @override
  Widget build(BuildContext context) {
 
    return RaisedButton(
        onPressed: (){
          print("Click!");
        },
 
        child: Align(
          alignment: Alignment.center,
            child: new Text("Button", softWrap: true)
          ),
        );
 
 
  }
}

手势检测器示例

但是,您通常希望使用小部件尚不支持的侦听器。当小组件不直接支持侦听器时,您可以将该小组件包装在中,并将处理程序传递给参数。操作方法如下:

class SampleApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter App',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Flutter_App(),
    );
  }
}
 
class Flutter_App extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return _State();
  }
}
 
class _State extends State<Flutter_App>
    with SingleTickerProviderStateMixin {
 
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        title: 'Flutter App',
        theme: ThemeData(primaryColor: Colors.blue),
        home: Scaffold(
            appBar: AppBar(
              title: Text('Flutter App'),
            ),
            body: Center(
              child: GestureDetector(
                  child: FlutterLogo(
                    size: 200.0,
                  ),
 
                onTap: () {
                print("Tap");
                },
              ),
            )));
  }
 
  @override
  void dispose() {
    // Resource release
    super.dispose();
  }
}

想知道如何收听双击事件吗?操作方法如下:

class SampleApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Sample App',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: AnimateApp(),
    );
  }
}
 
class AnimateApp extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return _AnimateAppState();
  }
}
 
class _AnimateAppState extends State<AnimateApp>
    with SingleTickerProviderStateMixin {
  AnimationController controller;
  Animation<double> animation;
  CurvedAnimation curve;
 
  @override
  void initState() {
    super.initState();
    // Create AnimationController object
    controller = AnimationController(
        vsync: this, duration: const Duration(milliseconds: 2000));
    curve = CurvedAnimation(parent: controller, curve: Curves.easeIn);
    // Create Animation object through Tween object
    animation = Tween(begin: 50.0, end: 200.0).animate(controller)
      ..addListener(() {
        // Note: This sentence cannot be omitted, otherwise the widget will not be redrawn and the animation effect will not be seen
        setState(() {});
      });
    // Perform animation
    controller.forward();
  }
 
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        title: 'AnimateApp',
        theme: ThemeData(primaryColor: Colors.blue),
        home: Scaffold(
            appBar: AppBar(
              title: Text('AnimateApp'),
            ),
            body: Center(
              child: GestureDetector(
                child: RotationTransition(
                    turns: curve,
                    child: FlutterLogo(
                      size: 200.0,
                    )),
                onDoubleTap: () {
                  if (controller.isCompleted) {
                    controller.reverse();
                  } else {
                    controller.forward();
                  }
                },
              ),
            )));
  }
 
  @override
  void dispose() {
    // Resource release
    controller.dispose();
    super.dispose();
  }
}

技术交流可以加Q群。

鼠标滚轮事件和Mac触控板双指事件 因为下一阶段要做的一个工作是开发一个WEB端的K线图,所以这一周一直在研究这方面的东西,其中涉及到的一个知识点是鼠标滚轮事件和Mac的触控板双指事件,发现这里面还是有一些坑的。 1. 用哪个事件 The wheel event fires when the user rotates a wheel button on a pointing device (typically a mouse). This event replaces the non-standard deprecated mousewheel event. 以前常使用的mousewheel事件已经逐渐被官方废弃了,改用whee 立即下载

相关推荐

告别CNN局限:用Transformer+迁移学习搞定高光谱图像分类(附Pytorch代码)

本文探讨了如何利用Transformer的自注意力机制和迁移学习策略解决高光谱图像分类中的挑战。通过结合CNN的局部特征提取和Transformer的全局建模能力,提出的DenseTransformer架构在多个数据集上实现了显著的性能提升。文章还提供了详细的PyTorch实现代码和工程优化技巧,帮助开发者快速应用这一技术。

weixin_32771907的博客 610

一指禅:Flutter中的触摸事件

触摸事件指的是用户在触摸屏幕时所产生的事件,包括按下、移动、抬起等等。在Flutter中,每个Widget都有一个build方法,通过该方法来构建UI界面。同时,每个Widget都可以监听触摸事件,并根据不同的事件类型来做出相应的处理。到这里,关于Flutter中触摸事件的相关知识已经讲解完毕。希望这篇文章能够帮助到你更好地理解Flutter中触摸事件的处理方式。如果你还有其他问题或需要更多的帮助,请随时在评论区留言!这里是甜瓜看代码,期待你的关注!

m0_69656288的博客 524

AI嵌入式系统测试:从确定性验证到概率性评估的体系构建

软件测试是保障系统质量的关键环节,其核心在于验证功能是否符合预期。传统嵌入式测试聚焦于确定性逻辑,通过代码覆盖、边界值分析等方法确保时序、内存等指标的精确性。随着人工智能技术的普及,深度学习模型以其概率性输出和复杂非线性映射的特性,为嵌入式系统带来了新的能力,也彻底改变了测试的范式。AI模型的‘黑盒’特性使得测试目标从‘绝对正确’转向‘置信度满足’,并催生了准确率、F1分数等新指标。在工程实践中,这种融合要求测试体系必须扩展维度,将数据质量、模型量化损失、资源约束下的精度与性能权衡纳入核心考量。尤其在嵌入式

weixin_26766559的博客 383

Flutter: 动作反馈

Flutter 里针对用户触摸反馈提供的一些方法。

J.D.的博客 1682

蓝牙 - 如何在Windows下抓取蓝牙数据

选择Windows Instarller(64-bit),最好不要选择PortableApps版,因为后面需要通过btvs.exe来启动Wireshark,如果是绿色可移植版,会启动失败。在安装完以后,找到btvs.exe文件,位于路径:C:\BTP\v1.14.0\x86下,这个视安装版本不同路径名不同。在第一台机器上启动btvs.exe,第二台机器上手动启动wireshark,并将第一台机器的IP地址作为参数。1,同一机器上,Wireshark安装后,会自动直接启动,如上面使用方式一样。

guoqx的专栏 2万+

“傻瓜”stata入门——熟悉操作界面

小白开始学习stata和matlab,零基础上手

nnpersistent的博客 4459

Flutter GestureDetector手势拖动的onVerticalDragUpdate监听方法无法触发

Flutter onVerticalDragUpdate不触发

qq_38774121的博客 649

AI训练师三级考证避坑指南|假证辨别+机构套路+OSTA验证

这是最基础的问题,也是最容易忽略的问题。人工智能训练师三级证书本身是有价值的——政府认可的职业技能等级证书、多地紧缺工种补贴、人才引进加分。但正因为有价值,才引来了大量骗子。记住三句话OSTA查不到的证,一分钱都不值声称免考包过的,100%是骗子培训费一次性谈清楚,后续加价直接走人如果你正在考虑考人工智能训练师三级证书,想要从报名到备考到拿证的完整一站式指南,欢迎查看我的付费专栏:📖《人工智能训练师三级·从零到拿证完全指南》99篇系统化内容,覆盖报名、备考、冲刺、拿证全流程。

白话机器学习 1222

Flutter BottomSheet 拖动分两段展示

的 Drag 方法,动态改变Dialog的高度,通过设置一个最大高度和最小高度分成两层进行展示。因为上面我们隐藏了自带的 DragHeader ,这里自定义一个可拖动的Header。常用的展示BottomSheet的方法为。

hsw 1313

数控系统(CNC)系列:Hurco VMX42SR_(3).控制系统硬件组成部分

控制箱是CNC系统的核心部分,负责处理所有的控制指令和数据。它通常包含主控板、电源模块、接口板等关键组件。伺服驱动器是CNC系统中的关键组件,负责将主控板发出的控制信号转换为电机所需的驱动电流。它通过闭环控制确保电机的精确运动。电机是CNC系统中的执行机构,负责实现主控板发出的运动指令。常见的电机类型包括步进电机和伺服电机。传感器是CNC系统中的重要组件,用于检测和反馈机床的运行状态。常见的传感器类型包括位置传感器、速度传感器、温度传感器等。电源供应系统为CNC系统的所有组件提供电力。主电源。

2401_87715305的博客 1281

从零开始学Agent的搭建——多角色项目需求分析框架实战

场景一:电商促销需求——技术细节顾此失彼团队用单Agent分析一个"双11秒杀系统"的需求。Agent输出了完整的功能清单,但当我们拿着这份方案找架构师评审时,发现了致命问题:Agent完全没有考虑库存扣减的并发一致性、Redis与MySQL之间的数据同步延迟、以及超卖风险的控制策略。原因是单Agent在处理"业务理解"任务时,已经耗尽了它的"注意力预算",技术深度分析几乎为空。场景二:ERP集成需求——跨系统边界模糊。

软件行业技术文化交流。 536

Flutter:如何响应触摸事件

目录传送门:《Flutter快速上手指南》先导篇除了 GestureDetector,Flutter 还提供了 Listener 来监听触摸事件。它也是一个 Widget,使用它包裹一个 Widget,就能能够处理该 Widget 上发生的触摸事件。1. Listener 的常用属性看看通过 Listener 可以处理哪些事件:属性类型说明onPointerDown(PointerDownEven...

weixin_34400525的博客 3288

beegfs读取文件完整流程分析

读取小于512KB文件数据,小于1s 读取15MB文件数据,花费7秒。

wfzy的博客 836

Flutter学习笔记之-触摸事件

Flutter学习笔记之-触摸事件 官方文档中介绍了Flutter中采用Listener和GestureDetector来对触摸事件的监听处理。 Listener的基本使用 Listener可以对child中的widget的触摸事件进行监听,包括手指按下、移动、抬起等。 class DemoWidget extends StatelessWidget { @override Widget build(BuildContext context) { return Listener(

WJ的博客 571

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

flutter中widget手势检测和触摸事件处理

手势检测和触摸事件处理 如何将一个onClick监听器添加到Flutter中的widget 在Android中,您可以通过调用方法setOnClickListener将OnClick绑定到按钮等view上. 在Flutter中,添加触摸监听器有两种方法: 如果Widget支持事件监听,则可以将一个函数传递给它并进行处理。例如,RaisedButton有一个onPressed参数 @override...

wdx_1136346879的博客 2033

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Flutter 触摸事件监听 Listener 、手势识别示例

指针事件 Listener 手势识别 GestureDetector GestureRecognizer 滑动冲突 为了让父容器也能接收到手势,我们需要同时使用 RawGestureDetector 和 GestureFactory,来改变竞技场决定由谁来响应用户事件的结果。 手势冲突只是手势级别的,而手势是对原始指针的语义化的识别,所以在遇到复杂的冲突场景时,都可以通过Listener直接识别原...

龙衣 6135

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Flutter手势交互:触摸事件处理指南

在移动应用开发中,手势交互(Gesture Interaction)是用户体验的核心组成部分。Flutter提供了一套完整的手势识别系统,允许开发者轻松处理点击、拖动、缩放等多种触摸事件。本文将深入探讨Flutter手势交互的底层原理、核心组件及实战技巧,帮助开发者构建流畅、响应式的用户交互体验。 ## Flutter手势系统架构 Flutter的手势系统基于**事件流处理**和**手势竞技场...

gitblog_01180的博客 825

Android学Flutter学习笔记 第三节 Android视角认知Flutter(触摸事件,List,Text)

本文介绍了Flutter中手势检测和ListView的实现方法。手势检测方面,可通过Widget自带的onPressed参数或使用GestureDetector包裹组件来处理点击、双击、长按等事件,并提供了旋转动画的示例。ListView方面,Flutter通过传递Widget列表实现滚动列表,无需处理回收问题,性能更优。同时说明了如何为列表项添加点击事件处理,与Android的onItemClickListener不同,Flutter直接使用Widget提供的触摸处理机制。这些内容从Android开发者视

weixin_44656996的博客 681

flutter onPressed onTap等手势检测及触摸事件处理

我怎么给 Flutter 的 widget 添加一个点击监听者? 在 Flutter 中,有两种方法来添加点击监听者: 1、如果 widget 本身支持事件监测,直接传递给它一个函数,并在这个函数里实现响应方法。例如,RaisedButton widget 拥有一个 RaisedButton 参数: @override Widget build(BuildContext context) { return RaisedButton( onPressed: () { print("cl

u013750244的博客 6208

Flutter触摸事件之仿购物车加减按钮控件,实现点击长按

目前还没有找到点击和长按都可以的效果 这里需要注意的几个点 首先Flutter没有Thread的概念,之前在Android中我们是可以通过控制线程去实现长按一秒内加10个数字这样 其次Flutter的长按事件和Android中的一样 ,onLongpress(),长按的时候它只会调用一次,没有持续的监听效果。在Android中我们可以通过去监听按钮的onTouch事件,Action,up,dow...

u013095264的博客 3483

flutter基础11-Flutter 底层“触摸事件(手势)传递流程

qq_35735916的博客 26

Flutter android emebed 初始化过程

flutter 在android 上的启动过程

chituhuan的专栏 392

Flutter开发(九):Flutter手势检测和触摸事件

1.给 wiget 添加点击事件 前面的文章在 ListView 中已经添加过 item 点击处理,外层包裹 GestureDetector ,调用里面的 onTap() 方法。 添加点击事件有两种方法: 如果 widget 本身支持事件检测,比如 RaisedButton widget 里面有 onPressed 参数。 另一种是 widget 不支持事件检测,外层包裹 GestureDetector ,调用里面的 onTap() 方法。 第一种方法代码示例: @override

wuqingsen1的博客 851

在Flutter中嵌入Native组件的正确姿势是

简历首选内推方式,速度快,效率高啊!然后可以在拉钩,boss,脉脉,大街上看看。简历上写道熟悉什么技术就一定要去熟悉它,不然被问到不会很尴尬!做过什么项目,即使项目体量不大,但也一定要熟悉实现原理!不是你负责的部分,也可以看看同事是怎么实现的,换你来做你会怎么做?做过什么,会什么是广度问题,取决于项目内容。但做过什么,达到怎样一个境界,这是深度问题,和个人学习能力和解决问题的态度有关了。大公司看深度,小公司看广度。大公司面试你会的,小公司面试他们用到的你会不会,也就是岗位匹配度。面试过程一定要有礼貌!

2401_84132393的博客 925

解析Flutter中的手势控制Gestures

  Flutter提供了很多处理触摸事件的控件,例如InkWell和InkResponse可以处理点击、双击、长按等事件,将它们包裹在需要响应触摸事件的控件外部就可以了,而且InkWell和InkResponse还会添加一个水波纹的点击效果,InkResponse还可以设置水波纹的形状。但是,InkWell和InkResponse都不会做任何的渲染工作,它们只是更新了父级Material Widg...

吉原拉面 5116
上一篇: Android开发之App缓存管理
下一篇: Java中使用枚举的方法
不秃头de程序猿
博客等级 码龄5年 4089粉丝 1478原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值