flutter InkWell实现水波纹点击效果

在flutter 开发中用InkWell或者GestureDetector将某个组件包起来,已添加点击事件。

GestureDetector 使用点击无水波纹出现,InkWell可以实现水波纹效果。
正常情况下使用 :

InkWell(
 //单击事件响应
  onTap: () {
  },
  child: Container(
   alignment: Alignment(0, 0),
   height: 28,
   width: 120,
   child: Text("InkWell单击事件"),
  ),
  ),

如果在InkWell的上下都出现的颜色的设置,如上中的Container中如果加入了color:Colors.white,或者是Container中的其他widget设置了coloro属性,这时候InkWell的水波纹效果会无效。

1 widget 设置水波纹点击效果 并设置widget背景

 new Center(
   child: new Material(
   // 设置背景颜色 默认矩形
   color: Colors.purple,
   child: new InkWell(
    //点击事件回调
    onTap: () {},
    //不要在这里设置背景色,for则会遮挡水波纹效果,如果设置的话尽量设置Material下面的color来实现背景色
    child: new Container(
    width: 300.0,
    height: 50.0,
    //设置child 居中
    alignment: Alignment(0, 0),
    child: Text("登录",style: TextStyle(color: Colors.white,fontSize: 16.0),),
    ),
   ),
   ),
  ),

或者 可以使用 Ink来设置,与Material设置color 的区别是,Ink可设置背景的形状样式。

new Center(
   child: new Material(
   //INK可以实现装饰容器,实现矩形 设置背景色
   child: new Ink(
    //设置背景 默认矩形
    color: Colors.purple,
    child: new InkWell(
    //点击事件回调
    onTap: () {},
    child: new Container(
     width: 300.0,
     height: 50.0,
     //设置child 居中
     alignment: Alignment(0, 0),
     child: Text("登录",style: TextStyle(color: Colors.white,fontSize: 16.0),),
    ),
    ),
   ),
   ),
  ),

2 圆角widget 设置水波纹点击效果

new Center(
 child: new Material(
//INK可以实现装饰容器
 child: new Ink(
 //用ink圆角矩形
 // color: Colors.red,
    decoration: new BoxDecoration(
    //不能同时”使用Ink的变量color属性以及decoration属性,两个只能存在一个
    color: Colors.purple,
    //设置圆角
    borderRadius: new BorderRadius.all(new Radius.circular(25.0)),
    ),
    child: new InkWell(
    //圆角设置,给水波纹也设置同样的圆角
    //如果这里不设置就会出现矩形的水波纹效果
    borderRadius: new BorderRadius.circular(25.0),
    //设置点击事件回调
    onTap: () {

    },
    child: new Container(
     width: 300.0,
     height: 50.0,
     //设置child 居中
     alignment: Alignment(0, 0),
     child: Text("登录",style: TextStyle(color: Colors.white,fontSize: 16.0),),
    ),
    ),
   ),
   ),
  ),

如果 InkWell 与Ink 不同时设置相同的圆角,例如 lnk 设置的圆角为20,而Ink没有设置,就会出现 矩形的水波纹点击效果

3 圆角widget 设置自定义水波纹颜色点击效果

new Center(
child: new Material(
child: new Ink(
 //设置背景
    decoration: new BoxDecoration(
    color: Colors.purple,
    borderRadius: new BorderRadius.all(new Radius.circular(25.0)),
    ),
    child: new InkResponse(
    borderRadius: new BorderRadius.all(new Radius.circular(25.0)),
    //点击或者toch控件高亮时显示的控件在控件上层,水波纹下层
    //highlightColor: Colors.yellowAccent,
    //点击或者toch控件高亮的shape形状
    highlightShape: BoxShape.rectangle,
    //.InkResponse内部的radius这个需要注意的是,我们需要半径大于控件的宽,如果radius过小,显示的水波纹就是一个很小的圆,
    //水波纹的半径
    radius: 300.0,
    //水波纹的颜色
    splashColor: Colors.black,
    //true表示要剪裁水波纹响应的界面 false不剪裁 如果控件是圆角不剪裁的话水波纹是矩形
    containedInkWell: true,
    //点击事件
    onTap: () {
     print("click");
    },
    child: new Container(
     //不能在InkResponse的child容器内部设置装饰器颜色,否则会遮盖住水波纹颜色的,containedInkWell设置为false就能看到是否是遮盖了。
     width: 300.0,
     height: 50.0,
     //设置child 居中
     alignment: Alignment(0, 0),
     child: Text("登录",style: TextStyle(color: Colors.white,fontSize: 16.0),),
    ),

    ),
   ),
   ),
  ),

4 圆角widget 设置高亮颜色点击效果

new Center(
   child: new Material(
   child: new Ink(
    //设置背景
    decoration: new BoxDecoration(
    color: Colors.purple,
    borderRadius: new BorderRadius.all(new Radius.circular(30.0)),
    ),
    child: new InkResponse(
    borderRadius: new BorderRadius.all(new Radius.circular(30.0)),
    //点击或者toch控件高亮时显示的控件在控件上层,水波纹下层
    highlightColor: Colors.purple[800],
    //点击或者toch控件高亮的shape形状
    highlightShape: BoxShape.rectangle,
    //.InkResponse内部的radius这个需要注意的是,我们需要半径大于控件的宽,如果radius过小,显示的水波纹就是一个很小的圆,
    //水波纹的半径
    radius: 0.0,
    //水波纹的颜色 设置了highlightColor属性后 splashColor将不起效果
    splashColor: Colors.red,
    //true表示要剪裁水波纹响应的界面 false不剪裁 如果控件是圆角不剪裁的话水波纹是矩形
    containedInkWell: true,

    onTap: () {
     print(
      'click');
    },
    child: new Container(
     //不能在InkResponse的child容器内部设置装饰器颜色,否则会遮盖住水波纹颜色的,containedInkWell设置为false就能看到是否是遮盖了。
     width: 300.0,
     height: 50.0,
     //设置child 居中
     alignment: Alignment(0, 0),
     child: Text("登录",style: TextStyle(color: Colors.white,fontSize: 16.0),),
    ),
    ),
   ),
   ),
  ),

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android实现自定义华丽的水波纹效果

    先来看看效果 实现效果 模拟水波纹的效果:点击屏幕就有圆环出现,半径从小到大,透明度从大到小(0为透明) 实现思路 1.自定义类继承View. 2.定义每个圆环的实体类 Wave,并初始化绘制圆环的画笔的数据. 3.重写onTouchEvent方法,down时,获得坐标点,做为圆环圆心. 4.发送handler信息,对数据进行修改,刷新页面. 5.重写onDraw方法,绘制一个圆环. 1. 自定义类继承View 新建WaterWaveView2类继承View public class Water

  • Android实现点击Button产生水波纹效果

    先上图,看看接下来我要向大家介绍的是个什么东西,如下图: 接下来要介绍的就是如何实现上述图中的波纹效果,这种效果如果大家没有体验过的话,可以看看百度手机卫士或者360手机卫士,里面的按钮点击效果都是这样的,另外Android 5.0以上的版本也出现了这种效果.不多说,下面聊聊具体的怎么实现. 首先大家看到的是三个button,水波纹的出现给我们的错觉是直接将波纹绘制在button上面的,但是这样能做到吗?首先button自己有background和src,如果把半透明的水波纹当作backgrou

  • Android自定义View 实现水波纹动画引导效果

    一.实现效果图 二.实现代码 1.自定义view package com.czhappy.showintroduce.view; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Pat

  • Android特效之水波纹的实现

    前言 水波纹特效,想必大家或多或少见过,在我的印象中,大致有如下几种: 支付宝 "咻咻咻" 式 流量球 "荡漾" 式 真实的水波纹效果,基于Bitmap处理式 话不多说,先来看看效果: 填充式水波纹,间距相等 非填充式水波纹,间距相等 非填充式水波纹,间距不断变大 填充式水波纹,间距不断变小 想必大家已经知道基本的原理了,就是用Canvas来画嘛,但可不是简单的画哦,请往下看. 分析 这种类型的水波纹,其实无非就是画圆而已,在给定的矩形中,一个个圆由最小半径扩大到最

  • Android仿水波纹流量球进度条控制器

    仿水波纹流球进度条控制器,Android实现高端大气的主流特效,供大家参考,具体内容如下 效果图: CircleView 这里主要是实现中心圆以及水波特效 package com.lgl.circleview; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.gra

  • Android项目实战手把手教你画圆形水波纹loadingview

    本文实例讲解的是如何画一个满满圆形水波纹loadingview,这类效果应用场景很多,比如内存占用百分比之类的,分享给大家供大家参考,具体内容如下 效果图如下: 预备的知识: 1.贝塞尔曲线    如果你不了解,可以来这里进行基础知识储备:神奇的贝塞尔曲线 2.Paint.setXfermode()  以及PorterDuffXfermode 千万不要被这个b的名字吓到,不熟悉看到可能会认为很难记,其实 只要站在巨人的丁丁上 还是很简单的. 好了 废话不多说 ,跟我一步步来做一个炫酷的view吧

  • Android实现兼容的水波纹效果

    先看看效果图 其实,要实现这一效果很简单,只要分drawable和drawablev21两个文件夹就好了. 普通情况下的selector: <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@c

  • Android实现水波纹效果

    一.效果 点击开始: 点击停止: 二.在MainActivity中 import android.graphics.Paint; import android.os.Bundle; import android.support.v4.view.animation.LinearOutSlowInInterpolator; import android.support.v7.app.AppCompatActivity; import android.view.View; import android

  • Android 自定义view实现水波纹动画效果

    在实际的开发中,很多时候还会遇到相对比较复杂的需求,比如产品妹纸或UI妹纸在哪看了个让人兴奋的效果,兴致高昂的来找你,看了之后目的很明确,当然就是希望你能给她: 在这样的关键时候,身子板就一定得硬了,可千万别说不行,爷们儿怎么能说不行呢: 好了,为了让大家都能给妹纸们想要的,后面会逐渐分享一些比较比较不错的效果,目的只有一个,通过自定义view实现我们所能实现的动效: 今天主要分享水波纹效果: 1.标准正余弦水波纹: 2.非标准圆形液柱水波纹: 虽说都是水波纹,但两者在实现上差异是比较大的,一个

  • Android自定义view实现水波纹进度球效果

    今天我们要实现的这个view没有太多交互性的view,所以就继承view. 自定义view的套路,套路很深 1.获取我们自定义属性attrs(可省略) 2.重写onMeasure方法,计算控件的宽和高 3.重写onDraw方法,绘制我们的控件 这么看来,自定义view的套路很清晰嘛. 我们看下今天的效果图,其中一个是放慢的效果(时间调的长) 我们按照套路来. 一.自定义属性 <declare-styleable name="WaveProgressView"> <at

随机推荐