自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(59)
  • 资源 (1)
  • 收藏
  • 关注

原创 kotlin运行

由于我本身是做android的,android studio本身有内置kotlin的插件。但若只是想跑kotlin的程序,并不像和android程序绑在一起,可以创建一个kt文件,在里面写一个main函数,就可以直接运行kotlin程序。还有一种方式是使用使用IntelliJ IDEA,不过我没啥兴趣用这个软件,就不介绍了。1.使用android studio。2、在线运行Kotlin代码。

2024-01-12 09:36:25 510

原创 android属性动画

属性动画的本质原理就是通过不断对值进行改变,并不断将该值赋给对象的属性,从而实现该对象在该属性上的动画效果。流程原理图如下(网络上找的):从上图可以知道属性动画分类大致又可以分为ValueAnimator,ObjectAnimator。ValueAnimator//设置参数:开始值0和结束值360,表示你要从哪个值到哪个值进行变化(旋转角度)val valueAnimator = ValueAnimator.ofFloat(0f, 360f)//这里是设置动画执行时间,毫秒valueAnim

2020-07-13 11:13:11 196

原创 android传统动画:帧动画和补间动画

现在android一般分为属性动画和传统动画。而传统动画有分为帧动画和补间动画。今天就来了解下这两个,就当做个笔记。帧动画帧动画有点其实就是类似gif的动画,用一张一张的图片叠加产生的动画,不过缺点也是很明显的,如果每张图片都很大,就很影响性能。所以现在其实比较少用了。帧动画的使用也很简单,这里准备三张图片。然后加入xml资源文件。animation_frame_play.xml<?xml version="1.0" encoding="utf-8"?><animation

2020-07-03 16:44:17 309

原创 recyclerview实现加载更多

这里并没有重写recyclerview,只是对adapter进行了封装。封装的adapter/** * * @fuction recycleview 加载更多用的adpter * @date 2018/9/15 * @author zhou */abstract class RVLoadMoreAdapter<T>( protected var mContext: Context, private val recyclerView: RecyclerView,

2020-07-03 09:23:56 614

原创 recyclerview的adapter封装(kotlin)

首先是重写 ViewHolder,参考了鸿洋大神的博客。class RViewHolder(private val mContext: Context, val convertView: View) : ViewHolder(convertView) { private val mViews: SparseArray<View> init { mViews = SparseArray() } /** * 通过viewId获取控件

2020-07-01 16:02:11 676

原创 android防止连续点击的简单实现(kotlin)

首先 方法类:package com.zhou.base.utils/** * Created by zhou on 17/3/20. */object ToolsUtil { //防止连续点击 /** 判断是否是快速点击 */ private var lastClickTime: Long = 0 val isFastDoubleClick: Boolean get() { val time = System.curre

2020-06-30 14:01:47 1327

原创 android实现跳转第三方地图导航

最近有个需求,就是在自己的app项目里面直接根据定位,跳转进入百度或者高德地图进行导航。val uri=Uri.parse("geo:24.473306,118.123456"); //打开地图定位val it = Intent(Intent.ACTION_VIEW, uri)val cn = it.resolveActivity(packageManager)if(cn == null){ Toast.makeText(this@MainActivity,"请先安装第三方导航软件",To

2020-06-23 10:26:45 1455

原创 vue后台管理:增加vuex状态管理和封装axios请求

引入vuex状态管理这里主要是参考了vue-element-admin的项目。先先创建store的文件夹,创建index.js主文件:import Vue from 'vue'import Vuex from 'vuex'import getters from './getters'import user from './modules/user'Vue.use(Vuex)const store = new Vuex.Store({ modules: { user },

2020-06-18 09:42:19 1944 2

原创 android 剪切板遇到的坑

最近想实现一个类似支付宝复制口令,然后打开运用就可以弹出弹框的功能。在其他手机上面操作都没有问题,但是在华为上面就开始有问题了,估计是版本比较高。后来研究了一下,竟然是剪切板找不到内容。就是if (!cm.hasPrimaryClip()) { return;}上面的cm.hasPrimaryClip()一直返回false。我就非常纳闷,明明已经复制了,而且是有内容的啊。后来终于找到了问题,好像是安卓新规定,运用进入前台之后,剪切板得延迟一下才能拿到内容,不然就是空的。这就有点尴尬了。那就

2020-06-11 15:35:21 3069

原创 docker部署项目(三):docker-compose配置和部署

在usr/local目录下面创建一个docker文件夹$ cd /usr/local$ mkdir docker进入docker文件里面创建创建一个demo的文件夹,docker-compose的项目及配置文件都会放在这里面。$ cd docker$ mkdir demo写一个Dockerfile的文件,主要是对springboot项目的操作运行配置$ cd demo$ vi Dockerfilevi是一个编辑命令,可以进入编辑页面进行编辑。关于vi的操作,请自行百度。Do.

2020-06-11 10:05:09 956 1

原创 docker部署项目(二):前后端打包

本来要直接进入主题将如何通过docker部署前后端分离的项目。后来想了一下,可能有些人还不知道怎么打包springboot的项目和vue项目。这就有点难办了,所以这里简单说一下,因为确实也很简单。springboot打包项目确保配置文件信息正确,一个命令搞定所有:mvn clean package -Dmaven.test.skip=true该命令在对应项目所在根目录进行才能操作。打包完成之后会在根目录里面的target文件夹里面生成*.jar的项目文件。这就是我们需要的项目打包文件。vu

2020-06-10 10:30:54 883

原创 docker部署项目(一):环境安装

我们之前的文章,用springboot+vue+redis简单写了一个前后端分离的后台管理系统。那么问题来了。如果要部署到阿里云服务器怎么弄呢。如果是传统的部署方式,肯定是要在服务器按照顺序安装数据库mysql,tocat,nginx,redis,然后修改一大堆配置文件。但是,我不。这里我准备用现在比较流行的docker进行部署。至于用docker部署有多香,我不说,但是妈妈再也不用担心我上学迟到了。这里假装大家已经对docker基础有了一定的了解,因为网上有很多基础介绍,当然我不会告诉你其实我也一知

2020-06-09 10:36:11 325

原创 后台管理(四):对axios网络请求结果的拦截处理

我们之前在处理token的时候,在axios里面进行的拦截设置,可以每次请求都在头部携带token信息,这样就不用每次请求的时候都要写一遍了。// axios请求拦截axios.interceptors.request.use(config => { config.headers.Authorization = window.sessionStorage.getItem('admin_token') return config})那么问题来了,token是有时效的,如果你有看我的后台

2020-06-06 15:22:36 504

原创 Activity进入和退出动画的实现

关于acitvity进入和退出动画可以在代码动态设置animation,也可以在主题设置style。这里以activity从底部弹出和向下退出的动画效果为例。activity.overridePendingTransition()该方法有两个参数,一个是我们新启动的activity进入时的动画,另一个是当前activity退出时的动画实现方式:启动activity的设置 startActivity(intent); overridePendingTransition(R.anim.

2020-06-04 14:49:17 910

原创 后台管理(三):springboot批量删除,插入和事务

我学习搭建的vue后台管理,最近弄到用户-权限-角色的分配。在做给角色分配权限的时候,涉及到数据库的批量删除,插入已经需要用到的事务。这里做一下记录。批量删除在分配的权限列表里面,我可以对角色分配的权限进行删除操作。权限分为三级。如果是删除第一级或者第二级权限,那么子权限肯定也要跟着删除,所以这就需要批量删除了。主要是在角色-权限关系表里面进行操作。这里主要将mapper里面的操作方式,其他没什么好讲的。springboot mapper代码:@DeleteProvider(type = P

2020-06-01 11:19:03 4820

原创 阿里云centos服务器安装mysql

虽然现在在服务器上面用docker可以很方便的进行安装,不过可能也有不用docker的情况,这里做个记录。所用数据库为mysql5.7下载与安装MySQL安装MySQL官方的yum repositorywget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm下载rpm包yum -y install mysql57-community-release-el7-10.noarch.rpm

2020-05-27 10:12:29 118

原创 android关于Scrollview(或NestedScrollView)嵌套webview出现的问题解决

最近在做一些页面详情页的时候,因为需要用到NestedScrollView嵌套webview进行部分网页的显示。因为之前用的是4.4的android版本测试的,所有没有发现问题。后来在android9.0的版本测试的时候,才发现会出现:webview的页面显示为空白或者高度为0这两种情况。 网上查了好多解决方案,基本都不能用,虽然有一个在onPageFinished里面重新设置webview的高度,但是这种限死高度的事情肯定是会有问题的,所有基本也可以放弃这个方案。最后通过测试webview的加载过程,

2020-05-25 16:42:19 1983 3

原创 pyhton爬虫学习(十七):scrapy框架通过管道pipeline存储到mysql数据库

假设有这样一个需求,我们准备爬取如上图所示,京东商城的手机销售列表的信息,并存入到数据库中。 从图中,我们可以看到,准备存储这几个字段图片(imageUrl),价格(price),产品描述(description),评论数(commentNum),店名(shopName)并且,我们还需要考虑分页爬取的问题。这里我们使用mysql数据库进行存储。Mysql操作这边我会说的很简单,毕竟不是我们本篇文章的重点。首先我们先创建数据库和存储的表。如下CREATE DATABASE phonedb; cre.

2020-05-21 14:54:39 582

原创 pyhton爬虫学习(十六):scrapy框架通过管道pipeline存储成文件

前面已经讲了scrapy框架的创建和运行,包括一些中间件的的设置和使用。 现在开始讲如何通过管道pipelines进行数据的存储,主要讲存储成文件形式。我们知道创建的scrapy项目有一个pipelines.py的文件,这个文件就是用来存储我们定义的管道处理类的地方。不过要使用pipelines,首先需要在settings.py文件里面配置pipelines。在setting.py文件里面找到关于pipelines的设置部分,默认设置如下所示。# Configure item pipelines#

2020-05-21 11:57:40 645

原创 android中onFinishInflate和onSizeChange()的调用时机

1.onFinishInflateonFinishInflate是view加载完xml之后执行的方法,相当于只是完成了布局的映射,在这个方法里面是得不到控件的高宽的,控件的高宽是必须在调用了onMeasure方法之后才能得到,而onFinishInflate方法是在setContentView之后、onMeasure之前。2.onSizeChange()控件大小改变后调用,一般调用顺序是:onMeasure() -> onSizeChange() -> onLayout() -> o

2020-05-21 10:54:36 989

原创 pyhton爬虫学习(十五):scrapy框架用户代理和ip代理的使用

当我们要爬取大量网页的时候,可能会收到对方服务器的限制,从而被禁止。那么我们应该如何应对这些反爬虫机制呢scrapy项目中可以有很多方法避免被禁止。其中两个比较好用的方式,就是使用用户代理池和ip代理池。因为大部分网站都是通过这两种方式进行反爬的。那么具体怎么使用呢,这里我们就用用到scrapy的中间件middlewares。因为在scrapy中两者的使用方式大同小异,这里就合在一起讲。首先是在setting.py设置用户代理池和ip代理池的变量,在其他py文件也可以,只要能被调用到就行。如下设置

2020-05-21 09:53:58 2132

原创 pyhton爬虫学习(十四):scrapy简单实例的创建和运行

接下来我主要通过一个具体的scrapy实例具体讲解scrapy框架的创建和运行过程。首先,使用scrapy startproject hello创建一个hello的scrapy爬虫项目。此时会生成一个名为hello的文件夹。该文件夹下拥有一个同名的子文件和一个scrapy.cfg的文件。该同名子文件下放置的是爬虫项目的核心代码,scrapy.cfg主要是爬虫项目的配置文件。这个我使用PyCharm编辑器打开工程文件,工程结构目录如下:init.py: 爬虫项目的初始化文件,用来对项目做初始化工作。

2020-05-20 15:42:03 339

原创 pyhton爬虫学习(十三):scrapy框架原理

Scrapy架构图引擎(Engine)负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等。调度器(Scheduler)调度器从引擎接受request并将他们入队,以便之后引擎请求他们时提供给引擎。下载器(Downloader)负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spider来处理爬虫(Spiders)它负责处

2020-05-20 14:27:21 278

原创 pyhton爬虫学习(十二):Scrapy的全局命令介绍

上一节讲了scrapy环境的安装,不清楚的可以先看一下 pyhton爬虫学习(十一):Scrapy的安装这节开始scrapy常用的命令。可以通过scrapy -h查看常用的一些命令。这边主要介绍全局的命令。startproject命令对scrapy爬虫项目的创建,目前是通过命令创建。比如你有一个文件夹python,要在这个文件里面建一个名为helloworld的scrapy爬虫项目。 先用cd命令进入python文件里面,通过命令scrapy startproject helloworld,这个时候

2020-05-20 11:15:34 287

原创 如何在自己的android项目中使用矢量图

众所周知,在android5.0以后,谷歌推出了android矢量图的相关使用包。 那么使用矢量图有什么好处呢?减少应用包apk的大小,减少了美工的工作量。因为不用在生成各种尺寸的图片进行适配。只要一套xml文件既可以解决所有的尺寸适配。一定程度上也减少了应用的内存。 当然,也有缺点,因为xml其实是绘制的文件,也就是使用的时候才去调用cpu进行绘制,所以一定程度上还是会耗点性能,当然不是很大影响。除非你的矢量图非常复杂。或者非常巨大。不过我们正常使用的矢量图标都是很小的,所以并没有特别大的影响。

2020-05-20 10:40:20 594 1

原创 android冷启动解决方案

关于android splash的页面,相信很多android开发都是很熟悉的,就是点击应用图标后第一个出现的那个界面。但是你可能会发现这样一种情况,第一次启动应用的时候,会出现一瞬间的黑屏或者白屏,之后才进入你写的splash界面。这个主要就是android的冷启动造成的,所有的应用都不可避免的会出现这样的情况。 那么有什么可以解决的方案呢?当然是有的。首先先了解一下冷启动,其实就是第一次启动运用或者说一段时间未使用导致应用被系统kill,这个过程,由于从启动应用到重新布局绘制渲染都要花费一定的时间,

2020-05-20 10:07:21 482

原创 pyhton爬虫学习(十一):Scrapy的安装

我现在的python版本为3.7.3 可直接在命令行输入pip install scrapy进行scrapy的安装,安装的时候会自动检索和安装所需要的其他依赖包。不过正常安装也可能会出现一些错误导致安装失败。比如我在window安装的时候提示提示如下错误Collecting Twisted>=13.1.0 (from scrapy) Downloading https://files.pythonhosted.org/packages/f8/2b/a80a70f71eb2b86992ffa5a

2020-05-19 10:48:41 177

原创 SparseArray和SparseArrayCompat的使用

视图动画概述视图动画分为Tween Animation(补间动画)和帧动画(Frame Animation)Tween Animation(补间动画)视图动画可以在一个视图容器内执行一系列简单变换(位置、大小、旋转、透明度)。 譬如,如果你有一个TextView对象,您可以移动、旋转、缩放、透明度设置其文本,当然,如果它有一个背景图像,背景图像会随着文本变化。 补间动画通过XML或Android代码定义,建议使用XML文件定义,因为它更具可读性、可重用性。 根据动画效果,补间动画分为以下5类:1.

2020-05-19 10:24:07 1079 1

原创 pyhton爬虫学习(十):常用的框架简单介绍

这里先简单的介绍几个常用的python爬虫红框,后续文章将会有详细的使用详解。scrapy框架是一套成熟的python爬虫框架,是使用python开发的快速、高层次的信息爬取框架,可以高效的爬取web页面并提取出我们关注的结构化数据,scrapy应用的领域很多,如网络爬虫开发,数据挖掘,数据监测,自动化测试等Crawley框架使用python开发出来的一款爬虫框架,致力于改变人们从互联网中提取数据的方式,让大家可以更高效的从互联网中爬取对应内容。Portia框架是一款允许没有任何编程基础的用户可

2020-05-19 09:56:17 165

原创 android中invalidate和requestLayout区别

View有两个很重要的方法:invalidate和requestLayout,常用于View重绘和更新。1. requestLayoutTo initiate a layout, call requestLayout(). This method is typically called by a view on itself when it believes that it can no longer fit within its current bounds. ——摘自View源码从上面这句话看出,

2020-05-19 09:47:30 1211

原创 pyhton爬虫学习(九):爬虫伪装

有些网站可以识别出访问者是通过浏览器还是爬虫反问该网站,如果识别不是浏览器,就会禁止反问或者禁止该用户在网站上面的其他行为。比如不允许被登录等。如果此时我们想对该网站进行爬取,就需要使用浏览器的伪装技术。那么什么是浏览器的伪装技术呢? 要回答这个问题,我们首先了解一下常见的反爬虫机制:通过分析用户请求的Headers信息进行反爬虫。通过检测用户行为进行反爬虫,比如通过判断同一个ip在短时间内是否频繁访问对应网站等进行分析。通过动态页面增加爬虫爬取的难度,达到反爬虫的目的,比如需要输入动态的图片验证

2020-05-19 09:17:13 258 1

原创 pyhton爬虫学习(八):线程和队列的使用

上一篇我们写了python实现图片爬取的实例,有兴趣可以看看地址:https://blog.csdn.net/stonezry/article/details/106072145我们还是实现和上面相同的功能,只是这里我们运用了线程和队列进行实现。python的线程创建方法,这里有两种方法。1. 将要执行的方法作为参数传给Thread的构造方法 target传递方法名字,args传递方法参数。 如下#!/usr/bin/python3 import threading import time

2020-05-18 17:55:27 194

原创 RecyclerView详解(六):实现列表上下循环滑动的需求

主要是实现类似这个效果这个效果其实也很简单,只是之前看到一些网上的实现方法感觉特别复杂,就决定自己写一个,也当做个记录。首先是初始化组件private fun initUI() { setContentView(R.layout.activity_rv_animation) tv_title.text = "上下滑动的动画效果" val linearLayoutManager = LinearLayoutManager(this) rv

2020-05-18 14:38:38 634

原创 vue后台管理(二):登录

前言首先,看一下assets这个文件夹,里面主要是用来存放一些资源文件。我这里做了一点调整:原来的logo.png替换成自己的logo。加入font文件,这个是iconfont的文件,主要是用来存放一些第三方的图标,具体的用法大家可以自行百度,不懂可以评论问我,这边就不具体细说。variables.css文件主要是存储全局的样式。main.js是项目的入口文件,项目中所有的页面都会加载main.js,所以main.js,主要有三个作用:实例化Vue。全局引用插件和css样式存储全局变量

2020-05-16 19:28:32 809 1

原创 RecyclerView详解(五):设置EmptyView

大家都知道listView提供了一个setEmptyView(View view)用来处理当获取不到数据的时候的界面处理——-用于做些数据为空的提示。但是我们也很遗憾的发现RecyclerView并没有提供像listView那样的setEmptyView()方法。不过办法自然是有的。 一般有两种方式:1.在布局文件中控制RecyclerView控件和空布局的显示和隐藏2.重写RecyclerView.Adapter(推荐)第一种思路自然low了一点,虽然listview也是采用这种思路,不信你

2020-05-14 10:29:27 1125

原创 RecyclerView详解(四):LayoutManager布局管理器

LayoutManager是一个抽象类,有3个子类:LinearLayoutManager: 线性布局管理器 GridLayoutManager: 表格布局管理器 StaggeredGridLayoutManager: 瀑布流布局管理器LinearLayoutManagerLinearLayoutManager 是线性布局管理器,使用频率是最高的,展示的样式跟listview一模一样。 该类有3个构造方法:LinearLayoutManager(Context context) LinearL

2020-05-14 09:39:05 1245 1

原创 RecyclerView详解(三):点击事件

我们知道ListView 有提供像setOnItemClickListener()和setOnItemLongClickListener()这样的点击事件,可以直接使用,但是RecyclerView没有提供,所以很明显,我们得自己写接口回调。确切的说,是在adapter里面写接口回调。 其实思路就是直接用在itemview里面设置setOnClickListener()即可。首先是定义回调接口public interface OnItemClickListener { void onIte

2020-05-14 09:18:02 761

原创 RecyclerView详解(二):ItemDecoration使用(kotlin)

我们知道listview可以通过在布局文件中设置android:divider=”#ffff0000” android:dividerHeight=”10dp”来控制item之间的间隔和颜色,但是recyclerview是不行的。 recyclerview提供了一个ItemDecoration类供开发者扩展使用,再通过RecyclerView.addItemDecoration(ItemDecoration)的方法,即可以完成对item间间隔的定义。其实ItemDecoration相当于可以自定义

2020-05-13 18:22:22 1304 1

原创 RecyclerView详解(一):简单使用介绍(kotlin)

RecyclerView是android5.0开始推出的一个列表类数据展示的组件,放在support-v7,所以5.0以下也同样可以使用。与经典的ListView相比,Recyclerview同样拥有item回收复用的功能,这一点从它的名字Recyclerview即回收view也可以看出。 其实RecyclerView并不是来替代listview的,两者使用场景不一样。如果是一些简单的列表展示,其实依旧用listview就可以了,而且很多方法都已经封装好。事实上,RecyclerView相对于listvi

2020-05-13 17:33:17 770

原创 springboot(七):设置全局异常处理

在controller上面加入一个请求路径,如下 @RequestMapping("/testException") public String testException(){ if(true) throw new RuntimeException("数据异常"); return "hello,spring boot!"; }很明显,如果请求该路径会抛出RuntimeException的异常。我们运行一下项目并访问该路径。结果如下以上是spr

2020-05-13 11:55:43 214

windows iis

iis可用与window 2003、2000、xp,

2009-11-07

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除