- 博客(70)
- 收藏
- 关注
原创 shell | 判断输入是否包含标点符号
#!/bin/bash#判断输入的字串是否包含标点符号#包含标点符号返回0,不包含返回1isIncludePunct(){#输入的第一个参数位$1#sed是流编辑器,s是sed的替换命令,替换源[^[:alnum:]],使用了正则表达式,代表除大小写字母和0-9数字之后取反,也就是除了大小写字符和数字之外的字符,替换目标为空,/g表示s标志结束#实质就是将输入的字串的标点符号字串去掉了newInput="$(echo $1 | sed 's/[^[:alnum:]]//g')"#判断替换之后
2022-04-11 17:15:21
965
原创 javascript | 登录框拖拽
效果:代码:<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8"> <title></title> <style> .login-header { width: 100%; text-align: center; height: 30px
2022-03-28 18:35:47
258
原创 javascript | 登陆form数据传递
效果:login代码:<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge">
2022-03-21 19:54:20
359
原创 javascript | 验证码倒计时
效果:代码:<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <tit
2022-03-15 19:07:39
196
原创 javascript | 京东倒计时
效果:思路:先执行一次countDown的原因是网页刷新的时候,setInterval会等待一秒才执行callback函数,还没执行函数之前就会显示出写si的123数字,所以先执行一次countDown函数,用于在刷新网页的时候不会看到写si的数字。代码:<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Co
2022-03-15 17:55:29
1407
原创 javascript | 京东按键获取焦点输入内容
效果:按键s,文本框获得焦点,不需要将光标定位到文本框再获得焦点输入内容。思路:为document添加onKeyUp事件监听,利用键盘事件对象的keyCode属性,获取用户点击的是哪一个按键,如果是S,那么为输入框获取焦点。为什么是使用keyup,而不是keydown,因为keydown长按会一直触发,为了避免在输入框中输入s,所以使用keyup。代码:<!DOCTYPE html><html lang="en"><head> <meta ch
2022-03-09 11:18:15
212
原创 javascript | 跟随鼠标的天使
效果:鼠标移动,图片就跟着移动。思路:给document注册鼠标移动事件,利用事件对象回去鼠标的相对于文档的x坐标和y坐标,x坐标是图片的left,y坐标是图片的top。代码:<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=
2022-03-08 12:11:36
181
原创 javasript |动态创建表格
效果:思路:数据是由事先创建的数组中获取的,只有表格头是写定的。从数组中获取数据,根据数据的多少动态创建表格,数组中有多少个对象,就创建多少个tr(行),循环遍历每个对象中的属性,用于创建行中的td,并将td中的内容写入,遍历完对象的每个属性之后,再创建一个td,td里面创建一个a,用于点击删除tr。点击删除的实现是循环遍历每个a,给每个a注册点击事件。代码:<html lang="en"><head> <meta charset="UTF-8">
2022-03-02 11:27:59
387
原创 javasript | 下拉菜单
效果:思路:比较复杂的是样式的编写,首先是ul里面含有3个li,每个li里面含有一个a和一个ul,ul里面再含有3个li,li里面再有一个a。当鼠标经过第一层ul里面的li时,第二层ul显示。当鼠标移出时,第二层ul不显示。代码:<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=d
2022-03-01 17:34:44
205
原创 javasript | tab切换
效果:点击tab显示不一样的内容代码:<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge">
2022-02-25 18:26:33
161
原创 javasript |全选和取消全选
效果:思路:1,标题列的checkbox设置点击事件,获取checked属性,下面的几个checkbox遍历设置跟标题列checkbox一样的属性。2,for循环为body的几个checkbox设置点击事件,每点击一次就遍历几个checkbox的checked属性,如果有一个为false,标题列的checkbox置为false,如果几个checkbox都为true,标题列的checkbox才指为true。代码:<!DOCTYPE html><html><hea
2022-02-25 16:20:35
367
原创 javasript | 鼠标经过表格行变色
效果:鼠标浮动在哪行,哪行就变色思路:一个table,table里面有thead和tbody,thead里面tr表示一行,th表示一格;tbody里面tr表示一行,td表示一格。代码:<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> &l
2022-02-25 14:46:35
443
原创 javasript |仿百度换肤效果
效果:点击图片,背景跟着更换。思路:一个ul,里面有4个li,让li横着排列的关键是设置li的float属性为left。让ul居中的关键是为ul设置宽度,否则默认为父容器的宽度,然后设置margin=100px auto实现水平居中的效果。代码:<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compati
2022-02-25 08:57:47
215
原创 javasript | 密码格式验证
效果:思路:一个div里面含有一个input和一个p。div用于将整个组件放在中间,放在中间的关键是margin= 100px auto;意思是上下100px,左右平分,这样就实现水平居中。input用于输入密码,当input失去焦点的时候判断value的长度,如果小于6大于16就改变p的背景,显示错误字样和红色;如果在6-16显示正确字样。p用于显示图标和文字,图标实际是p的背景图片+no repeat.将p显示在input的右边的关键是将p的diplay属性改为inline-block。行内
2022-02-24 16:13:52
744
原创 javasript |循环精灵图
效果:思路:使用ul+li 无序列表进行排列,将每个li排成3行4列的关键点是使用float属性,将每个li左浮动。循环设置每个li的背景图起始位置,那么每个li显示的背景就不一样啦。代码:<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge">
2022-02-23 17:28:45
143
原创 javasript | 关闭广告
效果:代码:<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <titl
2022-02-22 17:34:27
181
原创 javascript | 密码框明暗文变化
效果:代码:<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <tit
2022-02-22 16:46:32
168
原创 kotlin黑马 | 图片处理
使用kotlin生成指定大小,颜色的图片:import java.awt.Imageimport java.awt.image.BufferedImageimport java.io.Fileimport javax.imageio.ImageIOfun main(args: Array<String>) { var image= BufferedImage (100,100,BufferedImage.TYPE_3BYTE_BGR);//在电脑内存里图片缓冲区的图像,参数分别是
2021-07-05 22:44:10
468
2
转载 flutter中widget,element和renderObject源码解析
Flutter渲染之Widget、Element 和 RenderObject
2021-01-14 11:40:38
184
原创 flutter动态权限申请
目的:app经常要使用到动态权限申请的情况,权限申请最终只能使用methodChanal来调用安卓原生才能实现,自己写插件实在是麻烦,在pub上找了一个可实现动态权限申请的插件;效果:插件使用:permission_handler 5.0.1+1简单示例:1,在android端的manifest设置对应权限:2,在flutter端的pubspec引入插件:3,在initState中使用: @override void initState() { super.initStat
2021-01-13 15:17:22
1142
原创 flutter使用插件调用原生代码
效果:目的:在flutter项目中想要获取手机的系统版本号和手机厂商,flutter是ui系统,只能靠使用原生代码获取手机的系统版本号和手机厂商再传递给flutter,这就要用到插件,有很多插件的包,但是在这里使用自定义插件;资料:12.3 开发Flutter插件12.4 插件开发:Android端API实现android -------- 获取手机设备信息注意:flutter1.1.2之后,Android 平台更新Android 插件 API ,使用更加方便,见下文:支持新的 Android
2021-01-12 10:37:30
749
原创 flutter canvas实现既有边框又有填充的图案
需求:想要使用canvas画一个边框和填充颜色不一样的图案,flutter和js不一样,只有一个paint画笔的style属性可以设置,style值可以有两种类型,一种的PaintingStyle.stoke,代表边框还有一种是PaintingStyle.fill,代表填充,这两种值只能取其一,那么想要既有边框又有颜色填充怎么办呢?第一种解决方案:思路:使用Stack最上一层画只有边框的图形,下面一层画填充的图形,两层的图形区别只是一个style属性值是边框,并且设置边框颜色和宽度,另一层style属性
2020-12-16 15:12:58
1550
原创 flutter canvas及实现气泡
canvas了解:Flutter -canvas 使用画布和路径绘制自定义形状和线条曲线Flutter:成为Canvas绘制大师(一)Flutter:成为Canvas绘制大师(二)Flutter:成为Canvas绘制大师(三)Flutter 气泡效果合集(全网最全)以下是我根据上面链接改写的气泡:项目需要气泡的角度是在底部正中间:效果:思路:四个弯角利用drawArc画圆弧,之间的横竖线利用drawline画线,小尖叫也是利用drawline实现;import 'dart:math';
2020-12-16 14:50:58
1144
原创 flutter《女装商城》实战| 使用provider实现导航栏切换
思路:在app的根部初始化Provider,创建一个CurrentIndexProvide来监听当前currentIndex(表示当前页的index)的变化,当这个变量改变的时候,通知使用者,进行重绘,使用者应该包括body和NavigationItemBar;1,创建带有监听变量的notifyier类CurrentIndexProvideimport 'package:flutter/cupertino.dart';class CurrentIndexProvide with ChangeNoti
2020-12-15 00:52:24
239
原创 flutter返回刷新数据
需求:A页面跳到B页面,在B页面做数据更新,返回A页面刷新结果;思路:在A页面跳转到B页面的时候使用then函数,在B返回A的时候进行数据刷新操作。 Navigator.of(context).push(MaterialPageRoute(builder: (context) { return OpinionDetails(feedbackModel: _feedbackLoader[index]);//是一个feedbackModel
2020-12-11 10:26:22
830
原创 flutter 监听某个值的变化自动回调
1,创建一个ValueNotifier<>类型的变量 ValueNotifier<bool> isDataNull = ValueNotifier(true);2,有必要初始化的时候初始化 warningLoader.obtainData(true).then((value){ // warningLoader.length= warningLoader.length; isDataNull.value=!(warningLoader.length
2020-12-10 15:19:15
5023
1
原创 实习flutter小技巧 | Provider的使用
provider多与Consumer搭配使用,用于状态管理,类似观察者模式,简单点说就是当某个状态(变量)改变时,相关(引用到这个变量)的widget将会自动重绘,如下是简单例子:当count变量改变的时候自动重绘text Widget的文本,并显示出来;使用步骤:1,引包dependencies: flutter: sdk: flutter # The following adds the Cupertino Icons font to your application. #
2020-12-03 18:38:19
264
原创 Flutter初学小案例 | 路由渐变动画切换
平时的界面切换一般使用MaterialPageRoute,但是没有什么绚丽的东环效果,可以自己定义一个route实现动画切换,以下例子是渐变切换的例子:import 'package:flutter/cupertino.dart';import 'package:flutter/material.dart';class FirstPage extends StatelessWidget{ @override Widget build(BuildContext context) { /
2020-11-27 00:41:10
384
原创 flutter初学小案例 | 底部不规则导航栏
scafford的bottomNavigationBar参数赋值BottomAppBar可以实现,BottomAppBar比BottomNavigationBar灵活,在body参数之外准备好一个fab,使用BottomAppBar的shape属性设置BottomAppBar为一个挖了圆形的矩形,设置fab的位置便可;main:import 'package:flutter/cupertino.dart';import 'package:flutter/material.dart';import '
2020-11-25 23:41:21
213
原创 flutter初学小实例1 | 底部导航栏切换
思路:MaterialApp是提供了bottomnavigationbar的,可以使用,这个已经提供了的widget,再利用每次点击tab的时候使用set state方法来更新屏幕,切换中间的body的widget;main文件:import 'package:flutter/cupertino.dart';import 'package:flutter/material.dart';import 'package:flutter_app1/MyBottomNavigationBar.dart';
2020-11-25 20:28:15
177
原创 Meet实战| 通过融云+Litepal将添加好友的信息保存
思路:1,确定要保存的内容,添加好友的验证信息,对方好友的id,添加时间,还有验证的状态(待确认-1;同意0;拒绝1)2,利用融云的消息机制,在发送文本消息的基础上再次自定义协议,增加一个add_Friend的type用于证明是添加好友的消息,所以message的content将是message(验证消息+type),接着收到消息的时候使用Gson将message解析,判断type是否为add_friend,如果是的话,就证明是添加好友的消息,而不是普通的文本消息。涉及到的Gson解析类为TextBea
2020-11-08 10:58:56
620
原创 简单MVP架构实现+回调练习
回调:A实现接口Callback,重写了方法callback(),在这里callback方法是具体的实现方法,我的理解是回调向外暴漏接口,但是需要数据,要通过B类的数据实现不一样的重写。B中含有某个方法,这个方法的有一个参数是实现了A的实例(A实现了接口),B的这个方法也可以获得外部重写方法所需要的数据,所以在B 的这个方法中才是真正调用已经重写好的外部方法。实例:接口ResultListener相当于接口Callback,里面的getResult方法相当于callback()方法。package
2020-10-29 00:27:54
197
原创 没有内外边距的NopaddingTextView
package com.siyusoulmate.mm.ui;import android.content.Context;import android.content.res.TypedArray;import android.graphics.Canvas;import android.graphics.Paint;import android.graphics.Rect;import android.graphics.Typeface;import android.util.Attr
2020-10-28 13:33:05
443
转载 lambda表达式
https://blog.youkuaiyun.com/qq_28410283/article/details/80618456
2020-10-14 17:39:46
60
原创 实习新技能|将sqlite数据库与apk一起打包
原理:查了挺多资料,发现没有真正意义上的将sqlite和apk一起打包,这里通过将默认路径下的sqlite数据库复制到assets目录下,apk在首次打开的时候会判断sqlite的默认路径是否存在这个数据库,如果不存在,就将assets目录下的已经保存的数据库,通过IO流的形式复制到database路径下。1,将data/data/项目包名/database/下你的数据库复制到assets目录下;2,在app启动的时候判断在data/data/database/目录下存在你要的数据库,如果存在不进行
2020-08-26 10:00:48
1466
原创 onTouch之后onclick的执行情况
入口:View.java的dispatchTouchEvent()下图是方法中的重要代码:1,首先看一下li是什么:由上述代码可见,li不会为空;2,再看li.mOnTouchListener是否为空由上代码看出,li.mOnTouchListener是我们自己写的touchListener不会为空;3,再看 (mViewFlags & ENABLED_MASK) == ENABLED,这代表控件是否可点击;一般没有特别设定,控件都是可点击的,所以也为true;4,所以当我们传
2020-08-17 14:07:01
268
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人