自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(60)
  • 资源 (2)
  • 收藏
  • 关注

原创 Retrofit封装完善 (从实际项目出发)

前言

2020-10-24 14:03:33 1487

原创 androidstudio连接网易MUMU模拟器

androidstudio自带的模拟器不好用,可以试试网易MUMU模拟器,连接简单速度极快。打开mumu模拟器后,打开命令行输入:adb connect 127.0.0.1:7555就能成功连上模拟器。...

2019-12-07 13:23:57 572

原创 Flutter底部弹窗及修改弹窗最大高度

在Flutter中,想要实现底部弹窗只需要调用这个方法:showModalBottomSheet(context: null, builder: null)具体使用方法:showModalBottomSheet( context: context, builder: (BuildContext context) { return Cont...

2019-07-02 15:47:20 4796

原创 Flutter自定义圆形选择框

flutter自带的checkbox是方形的,需要圆形可以自定义一个,用法一样:import 'package:flutter/material.dart';class RoundCheckBox extends StatefulWidget { var value = false; Function(bool) onChanged; RoundCheckBox({Key ke...

2019-06-26 10:09:01 7085

原创 Flutter获取验证码倒计时按钮

在Flutter中,有一个定时器类Timer,使用方法:Timer timer = new Timer(new Duration(milliseconds: 60), (){ //倒计时结束执行 });上面代码就是执行一个定时器,60秒后执行回调方法。但是无法获取倒计时的进度。所以我们可以创建一个周期性的Timer:Timer = countDownTimer ...

2019-06-05 14:41:58 3626

原创 Flutter自定义加载框

先看效果图:在Flutter中要自定义这样一个加载框也是非常的简单,直接看代码:class LoadingDialog extends Dialog { @override Widget build(BuildContext context) { // TODO: implement build return new Material( type: Mat...

2019-05-31 09:54:53 1662

原创 flutter加载不同分辨率本地图片

flutter移动开发怎么加载本地图片,首先在该项目根目录也就是和ios,android同级创建一个images文件夹用来存放图片资源,然后放入需要加载的图片资源例如ic_phone.png,然后在项目目录下找到pubspec.yaml文件打开,声明图片:这样就可以在代码中使用 了Image.asset('images/ic_qq.png')如何加载不同分辨率的图呢,例如androi...

2019-05-28 14:56:57 8465 4

原创 git 强制覆盖分支

强制把a分支内容覆盖到b分支上,然后推送到远程仓库。git checkout b //切换到需要被覆盖的分支git reset --hard a//把分支覆盖到b分支git push origin b --force ...

2018-12-21 11:39:12 1979

原创 Android直播预览推流修改数据为镜像

 /** * 修改数据设置推流镜像 * * @param data * @param imageWidth * @param imageHeight * @return */ public static byte[] NV21_mirror(byte[] nv21_data, int width, int heig...

2018-11-21 10:10:46 673

原创 Android简单高效的屏幕适配方案--SmallestWidth适配

smallestWidth也叫做sw限定符,是在Android3.2引入的一种用来适配平板的方案。使用这种方案可以简单高效稳定的实现屏幕路适配。原理: Android会识别手机宽高中最小的那个值(其实就是宽度),然后根据识别到的数值去资源文件中寻找对应的文件比如:我的华为手机屏幕宽度是300dp,对应的就是sw300dp的文件夹。再来看看sw300文件夹下的dimens.xml文件上图是以设...

2018-11-06 16:33:03 729

原创 android view的多种移动方式对点击区域以及属性的影响

项目中需要做直播间飞屏动画(屏幕外飞进来,停留一会飞出),由于点击区域需要跟随view移动而改变,所以不能用普通的动画,然后就用属性动画来修改margin值达到平移效果,由于一开始view要在屏幕外边飞入。由于部分原因效果不是很满意,最后使用修改translation的方式达到效果。view的多种移动方式对点击区域以及属性的影响如图:...

2018-05-26 17:12:51 841

原创 sql常用命令

登录mysql:mysql -u root -p  回车输入密码退出mysql:exit修改登录密码(12345改成123456):mysqladmin -u root -p12345 -password 123456查看所有数据库:show databases;创建数据库mydb2:create database mydb2;创建数据库mydb2并设置编码(gbk/utf8):create da...

2018-05-18 14:31:35 227

原创 Android热修复——简单实现

上一篇文章《Android热修复——实现原理解析》已经分析了android热修复的实现原理,这里来做一个简单的实现。实现步骤拿到修复好的class文件转成dex包加载dex补丁先来看一下错误代码public void clickUserLogin(View view) { int i = 1/0;}很简单,然后点击的时候会报错,提示0不能是除数java.lang.Illeg

2018-04-17 11:41:30 664

原创 Android热修复——实现原理解析

一、简述android热修复是这2年较火的新技术,是作为安卓工程师必学的技能之一。在以前,线上产品如果出现了一点bug,就只能在修复后重新打包测试然后审核上线,然后用户还得重新下载安装,费时费力,大大降低了用户体验,但是现在有了热修复方案。 目前较火的热修复方案有很多:andfix,tinker,还有阿里最新的sophix方案(据称支持大多数加固)本篇文章通过通俗易懂的方式来解析热修...

2018-04-13 13:38:51 356 1

原创 android tablayout 自定义下划线(Indicator)样式 宽度(比文字宽度更短)

通常在ViewPager的上方,我们都会放一个标签指示器与ViewPager进行联动。tablayout作为官方退出的自带控件,大家应该都可以熟练使用了。面对各种需求,tablayout提供了几个简单的方法用来设置颜色,下划线宽度等。下面来完成几个自带方法不能解决的需求:需求 1:缩短下划线宽度 2:自定义下划线样式,比如弯曲的线条,比tab文字宽度更窄解决方法 网上有个很好的解决方案,可以用

2018-03-29 14:30:43 5845 1

原创 Genymotion模拟器修改hosts文件等问题

使用模拟器可能会遇到的问题: 1:模拟器是x86的 可能apk运行报错,下载一个兼容包,拖入到模拟器就行。5.0以上要使用新版的兼容包。 2:修改hosts文件adb dervices 查看连接的设备,如果报错了。 设置Genymotion 的sdk指向工程中的sdk路径adb shell $ su # mount -o remount,rw /system 获取权限adb

2018-03-22 10:18:03 1037

原创 Android多分辨率适配原理

Android常用度量单位:px:是Pixel的缩写,也就是说像素inch:是指英寸,设备对角线的长度dpi:它表示每英寸上的像素点个数,也就是屏幕密度。例如手机分辨率为1920*1080,先利用勾股定理得其对角线的像素值为2202.91,再除以对角线的长度5,计算出440.582便是该设备的屏幕密度dpi。dp:android中常用的使用单位,不要与dpi混淆,下面会详细介绍dp ldp

2018-01-11 14:19:20 1240

原创 android 线程池的使用以及Executors的优缺点

android开发,大家最熟悉的肯定是主线程,也就是ui线程,也都知道在非ui线程更新界面报错提示不允许在子线程更新ui。部分耗时操作会第一时间想到使用子线程,例如:new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub }}).

2017-12-06 16:59:28 3563

原创 androidstudio cmake指定so文件输出目录

使用cmake来编译jni代码,找不到so文件在哪里。虽然打包的时候会把so文件打包进去。 下面来配置CMakeLists.txt文件指定jniLibs为so文件输出目录。# For more information about using CMake with Android Studio, read the# documentation: https://d.android.com/stud

2017-08-04 10:33:05 2830

原创 解决asynchttpclient https请求报错hostname in certificate didn't match:

错误: javax.NET.ssl.SSLException:hostname in certificate didn’t match:<..*.com> != <.**.com>解决办法:public static SchemeRegistry getSchemeRegistry() { try { KeyStore trustStore = KeySto

2017-06-26 16:43:41 2684

原创 android 快速理解view的事件分发

事件的分发过程由三个主要的方法来共同完成:dispatchTouchEvent(MotionEvent ev),onInterceptTouchEvent(MotionEvent ev),onTouchEvent(MotionEvent ev),来看看他们分别有什么功能public boolean dispatchTouchEvent(MotionEvent ev) 事件的分发就是通过这个方法来执

2017-06-24 16:48:27 384

原创 android surfaceview截图 系统截图

使用普通截图方式截取surfaceview的人都会遇到surfaceview区域黑屏,也就是截取不到图片。然后各种百度google,有的说换用textureview,也有些别的方法。大概试了都没能成功,textureview是有对应方法。不过现在需要截图的是surfaceview。 Android在5.0系统之前,是没有开放视频录制的接口的,5.0之后Google开放了视频录制的接口,相关类是Me

2017-05-26 11:42:59 7592 11

原创 android快速仿花椒,映客直播上下滑动切换直播间

直播项目中竖版直播间原先没有上下滑动切换直播间的功能,需要加入滑动切换功能。我现在接手的项目由于直播间代码很多,最好是希望原代码都原封不动。翻看了几个app,发现花椒直播的上下滑动很有趣,如果在播放视频的时候滑动直播间布局不会跟着滑动,但是下面一个直播间封面被拉出来了,如果快速滑动的时候,也就是直播直播还来得及出现,都是封面的时候,就和正常viewpager滑动一样。所以就猜想花椒只是在直播间界面布

2017-05-15 18:44:49 9474 9

原创 android view基础

什么是viewview是android中所有控件的基类,例如textview,button或者viewgroup等。viewgroup也继承了view,但是可以包含多个控件。这是我网上找的一张继承关系图:view的参数view最基础的四个参数 left,top,right,bottom,通过view的getLeft(),getTop(),getRight(),getBottom()方法获

2017-03-30 17:45:22 644

原创 android LayoutInflaterCompat解析

LayoutInflaterCompat这个类一般很少用到,但是学习了这个类可以让我们加深对android的认识。首先来看一段代码:public class MainActivity extends AppCompatActivity{ @Override protected void onCreate(Bundle savedInstanceState) {

2017-03-22 11:58:41 2013

原创 android微信支付快速接入详细教程

准备工作 1:使用公司管理者微信号登录微信开放平台,进行开发者资质认证。完成审核后去申请appid,填入应用基本信息,签名值的是md5值,去掉所有冒号然后小写。md5值获取方式: http://blog.csdn.net/duolaimila/article/details/53643455 注意填写自己的正式签名。 2:由于微信支付测试需要正式的包,所以测试的时候需要先打包再测试。嫌麻烦的

2017-02-15 12:37:16 1024

原创 版本控制工具----git进阶

上一篇简单学了git的基础用法,创建仓库的提交代码。这次来学习下更多的用法添加忽略文件查看修改了的内容撤销还没有提交的修改查看提交记录 添加忽略文件 git会检查仓库目录下面有没有.gitignore文件,如果存在的话,就会去读取过滤规则。例如android项目自带有.gitignore文件,一个在根目录下,一个在app模块下。打开来看看: *.iml .gradle /local

2017-02-09 14:02:45 741

原创 版本控制工具-----git简单使用

安装git创建仓库提交代码安装git首先我用的windows系统,进入官网https://git-for-windows.github.io/下载然后打开安装包下一步直到安装完成就可以了。创建代码仓库进入git文件夹找到Git Bash并打开,在这里可以输入各种命令来操作。首先需要配置一下自己的身份,这样才能知道是谁在操作: git config –global user.name

2017-02-07 15:30:09 744

转载 MVP架构在Android中的实践

为什么要重视程序的架构设计对程序进行架构设计的原因,归根结底是为了提高生产力。通过设计是程序模块化,做到模块内部的高聚合和模块之间的低耦合(如依赖注入就是低耦合的集中体现)。这样做的好处是使得程序开发过程中,开发人员主需要专注于一点,提高程序开发的效率,并且更容易进行后续的测试以及定位问题。但是,设计不能违背目的,对于不同量级的工程,具体的架构实现方式必然不同,不要为了设计而设计,为了架构而架构。比

2017-02-06 15:28:00 445

原创 自定义DrawerLayout滑动样式

自从官方推出侧滑控件DrawerLayout后,大部分人都开始优先选择使用简单方便的DrawerLayout,今天来讲讲怎么自定义滑动样式,先来看效果图: 如何用DrawerLayout实现这个效果呢,其实很简单,只需要监听抽屉的滑动:drawer.addDrawerListener(new DrawerLayout.DrawerListener() { @Overri

2017-01-11 14:59:30 2041

原创 android6.0运行时权限回调没执行

早就了解过6.0加了个运行时权限,拿着我6.0系统的魅族手机测试了一下,发现压根就没任何区别和以前,回调方法都不执行。检查了没发现哪里写错了,就想到了估计是被魅族自己屏蔽了把然后继续沿用自家的权限管理方法。然后去测试了一下主流的手机,在我测试的机子中 {魅族,一加,小米,锤子,奇酷,htc}或多或少的改了,有魅族一样回调压根不执行的,也有执行了回调不管你同不同意直接返回同意,然后再弹出自家的权限管

2016-12-28 15:14:25 1124

原创 android设计模式之build模式

当我们要复杂对象的创建过程和这个对象的表示(展示)分离开来,一般就会想到build模式。 在android开发中,AlertDialog就是一个很好的例子。初次使用AlertDialog的同学可能会很困惑。为什么AlertDialog不能直接通过new的方式创建出来,要通过new AlertDialog.Builder(this).create()的方式创建。首先我们简单的举个例子:public

2016-12-23 15:05:40 1371

原创 android设计模式之状态模式

我们在使用一些刚安装的app会发现你需要执行某些操作,例如分享,评论会提示你没有登录,然后让你去登录。等你成功登录后就快可以进行相应的操作了。android开发中,如果我们遇到这种情况相信大部分都会直接用if(登录了){评论成功}else{提示去登录}。这是我们能想到最简单快速的解决方法了。但是随着功能的增加每个地方都去if else会显得杂乱,不好维护。所以状态模式就产生了:package com

2016-12-18 19:38:59 373

原创 androidstudio获取sha1值的方法

有时候我们需要用到一些开发平台上的东西需要我们填写sha1值,在eclipase上很快就找得到,但是androidstudio中并没有。所以我们只能在Terminal控制台获取。 C:\Users\Administrator.android 目录下 keytool -list -keystore debug.keystore。然后输入默认密码:android

2016-12-14 18:13:50 1143

原创 android消息机制(handler运行机制)解析

在android日常开发中,我们不可避免的会使用到有关handler的知识。可以利用handler来进行消息的传递。由于android不允许ui线程访问网络,非ui线程又不能更新ui。这种情况handler是怎么处理的。还有想延迟加载某个方法,大部分兄弟都会用到handler.postDelayed(runnable,delayMillis)方法来延迟加载。。也有些人会误认为这里是新开了一个线程来处

2016-12-13 12:04:27 514 2

原创 android dialog实现底部弹出和手指滑动隐藏效果

直接来看效果图: 第一次隐藏是点击空白区域自动隐藏,第二次是通过手指滑动控制dialog隐藏。 实现这个效果的代码量很少,直接来看代码: @Override protected void onStart() { super.onStart(); Window window = getWindow(); window.setWindowA

2016-09-13 15:48:18 7086 8

原创 android application方法执行多次

偶然发现我自定义的application中方法被调用了两次,看了一下配置文件发现百度的定位service使用了一个单独的进程: <service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote">

2016-09-12 13:30:35 3852 1

原创 android嵌套滑动NestedScrolling

首先来看我门要做的效果: 布局是用一个linerLayout实现NestedScrollingParent 接口,然后里面一次放了一个head,tablayout,viewpager,recyclerview。 NestedScrolling提供了一套父 View 和子 View 滑动交互机制。要完成这样的交互,父 View 需要实现 NestedScrollingParent 接口,而子

2016-09-02 14:21:41 908

原创 android Tablayout的使用

以往我们想要实现这样的效果,要么去找三方开源库,要么自己动手写viewpager,然后根据viewpager的滑动计算指示器的滑动距离来实现。现在在google提供的design包里有一个tablayout可以帮助我们快速实现。<android.support.design.widget.TabLayout android:id="@+id/tablayout"

2016-09-01 13:43:13 534

原创 FragmentTabHost的简单使用

现在很多主流的应用都喜欢底部几个导航按钮,点击切换不同的页面。通常我们可以自己底部写按钮,然后点击不同的按钮自己来控制切换fragment。今天我们用fragmentTabHost来快速的实现这个功能:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/r

2016-08-17 13:19:03 420

sw适配文件

android sw适配使用的文件。包含绝大数sw适配文件。可以直接使用

2018-11-06

viewpager 中间大 两边小 两边露出一点

viewpager 画廊, 效果是中间的page大一点 两边有一点露出

2018-07-21

android小视频录制,可直接用于项目

android小视频录制 简单稳定 兼容各个版本 简单修改可直接用于项目

2017-12-23

空空如也

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

TA关注的人

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