- 博客(60)
- 资源 (2)
- 收藏
- 关注
原创 androidstudio连接网易MUMU模拟器
androidstudio自带的模拟器不好用,可以试试网易MUMU模拟器,连接简单速度极快。打开mumu模拟器后,打开命令行输入:adb connect 127.0.0.1:7555就能成功连上模拟器。...
2019-12-07 13:23:57
631
原创 Flutter底部弹窗及修改弹窗最大高度
在Flutter中,想要实现底部弹窗只需要调用这个方法:showModalBottomSheet(context: null, builder: null)具体使用方法:showModalBottomSheet( context: context, builder: (BuildContext context) { return Cont...
2019-07-02 15:47:20
4959
原创 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
7209
原创 Flutter获取验证码倒计时按钮
在Flutter中,有一个定时器类Timer,使用方法:Timer timer = new Timer(new Duration(milliseconds: 60), (){ //倒计时结束执行 });上面代码就是执行一个定时器,60秒后执行回调方法。但是无法获取倒计时的进度。所以我们可以创建一个周期性的Timer:Timer = countDownTimer ...
2019-06-05 14:41:58
3728
原创 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
1741
原创 flutter加载不同分辨率本地图片
flutter移动开发怎么加载本地图片,首先在该项目根目录也就是和ios,android同级创建一个images文件夹用来存放图片资源,然后放入需要加载的图片资源例如ic_phone.png,然后在项目目录下找到pubspec.yaml文件打开,声明图片:这样就可以在代码中使用 了Image.asset('images/ic_qq.png')如何加载不同分辨率的图呢,例如androi...
2019-05-28 14:56:57
8878
4
原创 git 强制覆盖分支
强制把a分支内容覆盖到b分支上,然后推送到远程仓库。git checkout b //切换到需要被覆盖的分支git reset --hard a//把分支覆盖到b分支git push origin b --force ...
2018-12-21 11:39:12
2076
原创 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
745
原创 Android简单高效的屏幕适配方案--SmallestWidth适配
smallestWidth也叫做sw限定符,是在Android3.2引入的一种用来适配平板的方案。使用这种方案可以简单高效稳定的实现屏幕路适配。原理: Android会识别手机宽高中最小的那个值(其实就是宽度),然后根据识别到的数值去资源文件中寻找对应的文件比如:我的华为手机屏幕宽度是300dp,对应的就是sw300dp的文件夹。再来看看sw300文件夹下的dimens.xml文件上图是以设...
2018-11-06 16:33:03
817
原创 android view的多种移动方式对点击区域以及属性的影响
项目中需要做直播间飞屏动画(屏幕外飞进来,停留一会飞出),由于点击区域需要跟随view移动而改变,所以不能用普通的动画,然后就用属性动画来修改margin值达到平移效果,由于一开始view要在屏幕外边飞入。由于部分原因效果不是很满意,最后使用修改translation的方式达到效果。view的多种移动方式对点击区域以及属性的影响如图:...
2018-05-26 17:12:51
966
原创 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
269
原创 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
707
原创 Android热修复——实现原理解析
一、简述android热修复是这2年较火的新技术,是作为安卓工程师必学的技能之一。在以前,线上产品如果出现了一点bug,就只能在修复后重新打包测试然后审核上线,然后用户还得重新下载安装,费时费力,大大降低了用户体验,但是现在有了热修复方案。 目前较火的热修复方案有很多:andfix,tinker,还有阿里最新的sophix方案(据称支持大多数加固)本篇文章通过通俗易懂的方式来解析热修...
2018-04-13 13:38:51
485
原创 android tablayout 自定义下划线(Indicator)样式 宽度(比文字宽度更短)
通常在ViewPager的上方,我们都会放一个标签指示器与ViewPager进行联动。tablayout作为官方退出的自带控件,大家应该都可以熟练使用了。面对各种需求,tablayout提供了几个简单的方法用来设置颜色,下划线宽度等。下面来完成几个自带方法不能解决的需求:需求 1:缩短下划线宽度 2:自定义下划线样式,比如弯曲的线条,比tab文字宽度更窄解决方法 网上有个很好的解决方案,可以用
2018-03-29 14:30:43
6015
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
1102
原创 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
1332
原创 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
3647
原创 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
3010
原创 解决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
2754
原创 android 快速理解view的事件分发
事件的分发过程由三个主要的方法来共同完成:dispatchTouchEvent(MotionEvent ev),onInterceptTouchEvent(MotionEvent ev),onTouchEvent(MotionEvent ev),来看看他们分别有什么功能public boolean dispatchTouchEvent(MotionEvent ev) 事件的分发就是通过这个方法来执
2017-06-24 16:48:27
417
原创 android surfaceview截图 系统截图
使用普通截图方式截取surfaceview的人都会遇到surfaceview区域黑屏,也就是截取不到图片。然后各种百度google,有的说换用textureview,也有些别的方法。大概试了都没能成功,textureview是有对应方法。不过现在需要截图的是surfaceview。 Android在5.0系统之前,是没有开放视频录制的接口的,5.0之后Google开放了视频录制的接口,相关类是Me
2017-05-26 11:42:59
7831
8
原创 android快速仿花椒,映客直播上下滑动切换直播间
直播项目中竖版直播间原先没有上下滑动切换直播间的功能,需要加入滑动切换功能。我现在接手的项目由于直播间代码很多,最好是希望原代码都原封不动。翻看了几个app,发现花椒直播的上下滑动很有趣,如果在播放视频的时候滑动直播间布局不会跟着滑动,但是下面一个直播间封面被拉出来了,如果快速滑动的时候,也就是直播直播还来得及出现,都是封面的时候,就和正常viewpager滑动一样。所以就猜想花椒只是在直播间界面布
2017-05-15 18:44:49
9713
2
原创 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
668
原创 android LayoutInflaterCompat解析
LayoutInflaterCompat这个类一般很少用到,但是学习了这个类可以让我们加深对android的认识。首先来看一段代码:public class MainActivity extends AppCompatActivity{ @Override protected void onCreate(Bundle savedInstanceState) {
2017-03-22 11:58:41
2102
原创 android微信支付快速接入详细教程
准备工作 1:使用公司管理者微信号登录微信开放平台,进行开发者资质认证。完成审核后去申请appid,填入应用基本信息,签名值的是md5值,去掉所有冒号然后小写。md5值获取方式: http://blog.youkuaiyun.com/duolaimila/article/details/53643455 注意填写自己的正式签名。 2:由于微信支付测试需要正式的包,所以测试的时候需要先打包再测试。嫌麻烦的
2017-02-15 12:37:16
1089
原创 版本控制工具----git进阶
上一篇简单学了git的基础用法,创建仓库的提交代码。这次来学习下更多的用法添加忽略文件查看修改了的内容撤销还没有提交的修改查看提交记录 添加忽略文件 git会检查仓库目录下面有没有.gitignore文件,如果存在的话,就会去读取过滤规则。例如android项目自带有.gitignore文件,一个在根目录下,一个在app模块下。打开来看看: *.iml .gradle /local
2017-02-09 14:02:45
775
原创 版本控制工具-----git简单使用
安装git创建仓库提交代码安装git首先我用的windows系统,进入官网https://git-for-windows.github.io/下载然后打开安装包下一步直到安装完成就可以了。创建代码仓库进入git文件夹找到Git Bash并打开,在这里可以输入各种命令来操作。首先需要配置一下自己的身份,这样才能知道是谁在操作: git config –global user.name
2017-02-07 15:30:09
795
转载 MVP架构在Android中的实践
为什么要重视程序的架构设计对程序进行架构设计的原因,归根结底是为了提高生产力。通过设计是程序模块化,做到模块内部的高聚合和模块之间的低耦合(如依赖注入就是低耦合的集中体现)。这样做的好处是使得程序开发过程中,开发人员主需要专注于一点,提高程序开发的效率,并且更容易进行后续的测试以及定位问题。但是,设计不能违背目的,对于不同量级的工程,具体的架构实现方式必然不同,不要为了设计而设计,为了架构而架构。比
2017-02-06 15:28:00
482
原创 自定义DrawerLayout滑动样式
自从官方推出侧滑控件DrawerLayout后,大部分人都开始优先选择使用简单方便的DrawerLayout,今天来讲讲怎么自定义滑动样式,先来看效果图: 如何用DrawerLayout实现这个效果呢,其实很简单,只需要监听抽屉的滑动:drawer.addDrawerListener(new DrawerLayout.DrawerListener() { @Overri
2017-01-11 14:59:30
2115
原创 android6.0运行时权限回调没执行
早就了解过6.0加了个运行时权限,拿着我6.0系统的魅族手机测试了一下,发现压根就没任何区别和以前,回调方法都不执行。检查了没发现哪里写错了,就想到了估计是被魅族自己屏蔽了把然后继续沿用自家的权限管理方法。然后去测试了一下主流的手机,在我测试的机子中 {魅族,一加,小米,锤子,奇酷,htc}或多或少的改了,有魅族一样回调压根不执行的,也有执行了回调不管你同不同意直接返回同意,然后再弹出自家的权限管
2016-12-28 15:14:25
1161
原创 android设计模式之build模式
当我们要复杂对象的创建过程和这个对象的表示(展示)分离开来,一般就会想到build模式。 在android开发中,AlertDialog就是一个很好的例子。初次使用AlertDialog的同学可能会很困惑。为什么AlertDialog不能直接通过new的方式创建出来,要通过new AlertDialog.Builder(this).create()的方式创建。首先我们简单的举个例子:public
2016-12-23 15:05:40
1416
原创 android设计模式之状态模式
我们在使用一些刚安装的app会发现你需要执行某些操作,例如分享,评论会提示你没有登录,然后让你去登录。等你成功登录后就快可以进行相应的操作了。android开发中,如果我们遇到这种情况相信大部分都会直接用if(登录了){评论成功}else{提示去登录}。这是我们能想到最简单快速的解决方法了。但是随着功能的增加每个地方都去if else会显得杂乱,不好维护。所以状态模式就产生了:package com
2016-12-18 19:38:59
416
原创 androidstudio获取sha1值的方法
有时候我们需要用到一些开发平台上的东西需要我们填写sha1值,在eclipase上很快就找得到,但是androidstudio中并没有。所以我们只能在Terminal控制台获取。 C:\Users\Administrator.android 目录下 keytool -list -keystore debug.keystore。然后输入默认密码:android
2016-12-14 18:13:50
1202
原创 android消息机制(handler运行机制)解析
在android日常开发中,我们不可避免的会使用到有关handler的知识。可以利用handler来进行消息的传递。由于android不允许ui线程访问网络,非ui线程又不能更新ui。这种情况handler是怎么处理的。还有想延迟加载某个方法,大部分兄弟都会用到handler.postDelayed(runnable,delayMillis)方法来延迟加载。。也有些人会误认为这里是新开了一个线程来处
2016-12-13 12:04:27
552
原创 android dialog实现底部弹出和手指滑动隐藏效果
直接来看效果图: 第一次隐藏是点击空白区域自动隐藏,第二次是通过手指滑动控制dialog隐藏。 实现这个效果的代码量很少,直接来看代码: @Override protected void onStart() { super.onStart(); Window window = getWindow(); window.setWindowA
2016-09-13 15:48:18
7320
5
原创 android application方法执行多次
偶然发现我自定义的application中方法被调用了两次,看了一下配置文件发现百度的定位service使用了一个单独的进程: <service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote">
2016-09-12 13:30:35
3915
原创 android嵌套滑动NestedScrolling
首先来看我门要做的效果: 布局是用一个linerLayout实现NestedScrollingParent 接口,然后里面一次放了一个head,tablayout,viewpager,recyclerview。 NestedScrolling提供了一套父 View 和子 View 滑动交互机制。要完成这样的交互,父 View 需要实现 NestedScrollingParent 接口,而子
2016-09-02 14:21:41
950
原创 android Tablayout的使用
以往我们想要实现这样的效果,要么去找三方开源库,要么自己动手写viewpager,然后根据viewpager的滑动计算指示器的滑动距离来实现。现在在google提供的design包里有一个tablayout可以帮助我们快速实现。<android.support.design.widget.TabLayout android:id="@+id/tablayout"
2016-09-01 13:43:13
614
原创 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
455
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人