自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(144)
  • 资源 (12)
  • 收藏
  • 关注

原创 Activity+Fragment基本框架(主要解决重启后,出现重叠的问题)

之前写过,这里记载一个完整的MainActivitypackage com.example.apple.quickdemo.activity;import android.os.Bundle;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentManager;import android.s

2017-07-05 11:01:06 2343

原创 EventBus的使用

参考 EventBus—github 启舰— EventBus使用详解(一)——初步使用EventBus 启舰— EventBus使用详解(二)——EventBus使用进阶Gadlecompile 'org.greenrobot:eventbus:3.0.0'使用方法 涉及到三个地方 1. 新建一个消息类 2. 在你要接受消息的类里面,写一个onMessageEve

2017-06-05 13:55:40 553

原创 PorterDuffXfermode学习笔记

PorterDuffXfermode是什么PorterDuffXfermode是一种规则 PorterDuffXfermode是一种颜色混合的规则 PorterDuffXfermode用于实现新绘制的像素(SRC)与Canvas上对应位置已有的像素(DEST)按照混合规则进行颜色混合。 记住:先绘制的图形为DEST 这个混合规则一个基本的知识点是,一个图片是由a和c组成的,a表示透

2017-05-27 10:46:10 304

原创 canvas操作

第一类基本变换效果连续性总结第二类画布的保存与恢复SavesaveLayersaveLayerAlpharestorerestoreToCount另clipsaveFLAG 摘自以下文章 自定义控件之绘图篇(四):canvas变换与操作 自定义控件三部曲之绘图篇(十三)——Canvas与图层(一) 自定义控件三部曲之绘图篇(十四)——Canvas与图层(二)

2017-05-27 10:40:17 589

原创 Shader应用---霓虹闪烁文字效果

package com.example.apple.shaderdemo;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.LinearGradient;import android.graphics.Matri

2017-05-24 13:37:08 1749

原创 Shader应用---雷达扫描效果

效果图package com.example.apple.shaderdemo;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.BitmapShader;import android.graph

2017-05-24 10:06:02 2344 1

原创 Shader的介绍

分类BitmapShader :图片贴图效果LinearGradient:线性渐变色效果RadialGradient:环形渐变色效果SweepGradient:雷达扫描效果ComposeShader:以上效果的任意组合基本用法在onDraw()里写下面的代码//构建画笔Paint mPaint=new Paint();//构建ShaderSweepGradient mSweepGr

2017-05-23 15:30:57 574

原创 Okhttp简单使用

异步GET请求异步POST配置okHttpClient使用 Okhttp 下载文件和更新进度条异步GET请求 public void asynGet(View view) { //1.构建一个最简单的OkHttpClient mOkHttpClient = new OkHttpClient(); //2.构建一个Request,指明请求方法

2017-05-22 13:25:03 554

转载 android 使用广播监听网络状态

转载记录一下 http://www.cnblogs.com/sipher/articles/2567697.html

2017-05-19 11:04:30 467

原创 View如何加载到窗口

View如何加载到窗口

2017-05-07 18:16:02 513

原创 如何查看FrameWork层源码(例如:PhoneWindow) android.jar

找到你的sdk路径打开sdk路径位置 把这个android.jar拷贝到你的项目中, 建立一个lib目录,放到lib下面,点击右键,as a library,就可以双击打开了 另外你可以双击shift,去搜索

2017-05-05 09:34:37 5495 1

原创 机顶盒开发前奏---电脑adb无线连接机顶盒

今天拿到一个智能机顶盒,发现并不能像是连接手机一样直接调试,只能使用无线连接的方式调试(电脑、机顶盒必须在同一个局域网,wifi和有限连接都可以) 1. 首先要获得机顶盒adb调试密码(不同型号的机顶盒,打开adb的方式不同) 2. 打开AndroidStudio终端Terminal,输入(adb connect 192.168.8.58)后面是你的机顶盒的IP地址, - 如

2017-04-28 09:38:51 10483

原创 ViewPager过渡动画position的理解

/** * Created by apple on 2017/4/18. */ public class DepthPageTransformer implements ViewPager.PageTransformer { private static final float MIN_SCALE = 0.75f;

2017-04-19 09:01:04 885

原创 导入一个AndroidStudio项目时遇到的gradle问题

问题: 由于你导入的项目的gradle版本与本地的gradle版本不一致,会导致让AndroidStudio去下载对应版本的gradle,而这个gradle一般在80M左右(需要翻墙),根本下载不下来,会导致卡死在那里。解决方式一:如果你是导入github上的项目,只是为了学习一下代码,那么可以采用快速配置gradle的方式(修改所导入项目的gradle配置为本地的gradle配置,这样就不用

2017-04-16 18:23:48 3502

原创 Mac环境下,搭建了AndroidStudio开发环境

今天在Mac环境下,搭建了AndroidStudio开发环境,步骤如下 1. 到官网下载AndroidStudio的Mac版本 2. 下载后的安装过程,有点不适应,点击安装包,打开后,把安装图标放到Application里面,等待安装就行了 3. 如果没有SDK,直接点击cancel,进去之后点击Standard安装,会自动下载所需的sdk等相关文件,然后完成。 4. 这里新建一个项目后,会

2017-04-15 19:13:56 2914

原创 优秀的第三方常用控件

try字母索引(城市和通讯录)IndexableRecyclerView城市索引通讯录索引<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.andr

2017-04-14 16:04:20 1494

转载 AS创建assets文件夹与字体

原文链接 AS创建assets文件夹与字体方法一 // 设置浪漫雅圆字体 字体格式要为ttf Typeface typeface = Typeface.createFromAsset(getAssets(), "fonts/lmyy.ttf"); mTv.setTypeface(typeface);方法二 // 另一种思路public clas

2017-04-12 12:02:41 913

原创 如何创建一个不死的Service---双进程守护

要点如何在一个app里开启两个进程 manifest.xml配置: <!--实现了在另一个线程里运行的Service,android:process=".remoteservice"--> <!--必须是双进程,负责起一堆Service也没用,杀死一个线程就全都杀死了--> <service android:name=".RemoteSe

2017-04-11 10:28:13 1174

原创 Fragment详解摘要整理

引子所有的知识均来自下面这篇博客。这篇博客系列详细的讲解了Fragment用法。 Fragment详解笔记FragmentManager管理者 要管理activity中的fragments,你就需要使用FragmentManager。通过getFragmentManager()或getSupportFragmentManager()获得manager.findFragmentById();

2017-04-08 23:33:01 483

原创 Fragment内存回收后重叠及恢复数据问题

从源码角度分析,为什么会发生Fragment重叠?package com.mine.fragmentdemo;import android.os.Bundle;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentManager;import android.support.v4.app.Fra

2017-04-07 22:23:39 2241

原创 线程池

package com.doc.uidemo;import java.util.concurrent.Executors;import java.util.concurrent.LinkedBlockingDeque;import java.util.concurrent.ThreadPoolExecutor;import java.util.concurrent.ThreadPoolExec

2017-04-05 11:08:10 304

原创 Android捕获异常的实现

为什么要捕获异常在调试阶段,我们可以用手机连着电脑(或者说模拟器),有问题了直接看日志,定位错误代码的位置,但是android机型成千上万,或者测试没有侧到位,当用户使用时出现了异常,直接crash了,第一用户体验不好,第二,用户不会告诉你怎么出现的bug,你也无法在下一个版本中修改这些问题捕获异常,要完成的任务1.任务一、不让用户看到奔溃页面,或者说即使奔溃了,立马重启,让用户感受不到,提升用户的

2017-04-03 23:05:54 759

原创 HandlerThread用法

我们能在主线程直接使用handler,是因为主线程为我们准备好了Looper,并且开启了循环,这样我们在主线程new了Handler之后,就可以使用Handler机制去处理消息了。 但是你直接new了个子线程,想在子线程使用Handler在子线程处理消息,是不行的,你要自己Looper.prepare(),Looper.loop(),才可以。 而HandlerThread这个Thread已经在其

2017-04-01 17:12:22 755

原创 Service之AIDL

引子上一篇讲到了什么Service如何开启服务、绑定本地服务,这一篇说说AIDL(android接口定义语言),实现了进程间通讯(IPC机制 inner-process communication)所谓IPC机制,即进程间通讯(Inter-Process Communication)。我们的应用有时候出于业务需要,可能是多进程的,而由于不同进程是不共享一个内存池的,所以进程之间不能直接通讯...

2017-03-20 22:31:37 183

原创 Handler机制

概述一个Thread里有一个Looper,一个Looper里有一个MessageQueue,这个MessageQueue里维护一个消息队列有存取消息的功能,而Handle是用来发消息和处理消息的Looper 1.初始化一个消息队列 2.将looper对象和当前线程一一对应,线程安全,通过ThreadLocal 3.开启循环,运行消息队列,不断里从消息队列里取得消息1.looper.

2017-03-12 16:10:13 480

原创 RecyclerView多个item布局的写法(头布局+脚布局)

RecyclerView多个item布局的写法上图github下载源码 Initial commit第一次提交的代码,为本文内容以下的为主要代码,看注释即可,比较简单MainActivity 含上拉加载更多package com.anew.recyclerviewall;import android.os.Bundle;import android.os.Handler;import

2017-01-08 09:51:42 4086 1

原创 RecyclerView遇到的两个bug

问题1出现match_parent、margin无效的情况LayoutInflater inflater = LayoutInflater.from(context); View view = inflater.inflate(R.layout.item_body, parent, false);问题2使用增删item时,为了动画效果,不能使用notifyDataSetChanged

2017-01-07 16:47:49 2288 1

原创 蓝牙(WLAN)扫描发现设备在6.0以上的bug

情景一个蓝牙扫描发现附近的设备的功能,在6.0及其以下的设备运行正常,但是在6.0.1的设备上,却扫描不到设备我苦苦找了7个小时的问题,在我要放弃的时候,打开了一个网站,一句话解决了,感觉奔溃又喜悦! 另外说一句,必须用google,否则你很难找到解决方案解决历程由于蓝牙扫描需要获取以下的权限 <uses-permission android:name="android.permission.B

2016-11-24 22:11:21 1598

原创 webview的postURL以及webview中SessionID同步

webview的postURL//第一步:拼接请求参数 String postData = "username=" + username + "&psw=" + psw + "&time=" + time + "&token=" + token;//第二步:直接postURl webv

2016-11-21 20:14:26 3080

原创 说说泛型

引子最近在重构代码,发现很多情况下,抽取基类,都离不开泛型这个知识点,用好泛型,是重构代码的第一步子类限定和超类限定 看这里什么是泛型当你想要定义一个基类,或者是通用的类、接口、方法时,你还不知道以后的使用者要往里面传入什么类型的对象,这时候,你就不能把这个数据类型写死了,写死了就不具有扩展性、通用性,就不能称之为基(通用)了。这时候你就需要泛型了。 当然,你会问,我不知道要传入什么类型,我直接

2016-11-14 20:41:11 452

原创 AIDL使用步骤

进程间通信备忘这个知识点,每次用了总是忘,所以在此记录下来。情景在A应用里调用B应用的Service,这里说的是绑定服务的情况,启动服务的进程间通信比较简单。 不了解绑定服务的话,可以参照我的另一篇文章Service简介 本文以截图方式给出正文第一步第二步第三步第四步第五步第六步第七步第八步第九步第十步

2016-11-14 19:20:28 672

原创 如何监听软键盘的弹出、隐藏(亲测可用)

看了N多文章,终于找到了答案第一步这篇文章解决了在不是全屏模式下,监听软键盘弹出隐藏,但是在全屏模式下,无效 注意:必须设置 android:windowSoftInputMode="adjustResize"代码直接在Activity里添加即可 注意下面的activityRootView对应的R.id.activityRoot,是你整个布局的根布局 原理就是通过判断手机屏幕的

2016-09-24 00:55:01 8700

原创 SwipeRefreshLayout快速刷新引起的bug

SwipeRefreshLayout+RecyclerView 如果快速不停地刷新页面,会报异常 java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid item position 6(offset:6).state:10

2016-09-18 16:38:06 2986

原创 SwipeRefreshLayout基本用法

布局文件引入控件(SwipeRefreshLayout是一个ViewGroup,内部一般放RecyclerView之类的控件)``` <android.support.v4.widget.SwipeRefreshLayout android:id="@+id/swipeRefreshLayout" android:layout_width="m

2016-09-17 09:15:04 4368

原创 RecycleView的基本用法

RecycleView的用法build.gradle中加入:compile 'com.android.support:recyclerview-v7:23.1.1'布局文件引入:<android.support.v7.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_par

2016-09-17 09:11:08 579

原创 “一盘沙拉”带你入门Dagger2(六)之Component依赖

如果我们有一套做好的煎饼果子(一套齐全的依赖体系,Module、Component),另外一个类需要这套依赖体系的一个对象作为依赖,怎么办,还需要再为这个对象,建立一套新的Module和Component吗 显然是不用的,Component之间是可以依赖的开始举例子:1. 我们先做一套的依赖体系,这个体系里,依赖的Tomato西红柿Tomato.classpublic class Tomato

2016-09-05 15:12:09 4774 5

原创 “一盘沙拉”带你入门Dagger2(五)之 @Scope

像上文所说我们要让苹果、桔子使用同一把刀,让香蕉使用另外一把刀,开始吧在Dagger2中,我们可以通过自定义Scope来实现局部单例。 首先让我们先来定义一个局部作用域:/** * 自定义一个作用域 */@Scope@Retention(RetentionPolicy.RUNTIME)public @interface KnifeScope {}在Module里使用 @KnifeS

2016-09-04 09:51:02 2347 3

原创 “一盘沙拉”带你入门Dagger2(四)之 @Singleton

@Singleton可以方便地实现单例(全局单例)我们在Salad类里面引入两个Orange的实例,查看他们的内存地址public class Salad { @Inject//桔子1 Orange orange1; @Inject//桔子2 Orange orange2; ... public Salad() { ... Log.e("TA

2016-09-02 16:42:00 4447 3

原创 “一盘沙拉”带你入门Dagger2(三)之@Qualifier

当一个类有两个构造函数时,使用Dagger2时,如何获取指定构造函数new出来的对象 或者说虽然这有一个构造函数,但是这个构造函数new出了两个具有不同属性的对象,我们如何获取到他们,比如Person类,他有一个属性Sex,new了第一个Person,设置sex=“male”,new了第二个Person,设置sex=“female”,我们如何在注入依赖时候,准确注入一个男人或者男人呢

2016-09-01 14:41:15 3164 1

原创 “一盘沙拉”带你入门Dagger2(二)之带参数怎么办

如果被依赖类的构造函数带有参数,要把这个参数的类型也管理起来 现在要在Salad里新加入一个水果Orange,但是Orange的构造函数里需要传入一个Knife来切水果,那么如何注入这个Orange呢?新增的两个类public class Orange { Knife knife; public Orange(Knife knife){ this.knife=kn

2016-09-01 13:42:11 4313 3

广播和服务

绑定服务、发送有序广播、服务里代码注册广播

2016-06-19

RecyclerView上下拖动条目排序,左右划出屏幕删除条目的最简单的实现

ItemTouchHelperAdapter

2016-05-31

仿微信多选照片,GridView展示所选择图片,PhotoView可预览

仿微信多选照片,GridView展示所选择图片,PhotoView可预览

2016-03-26

如何写上下文菜单

上下文菜单(即某个视图被长按时弹出的菜单,类似于电脑上的右键菜单)

2015-06-29

如何写自定义菜单

点击菜单键,弹出一个popwindow,自定义的菜单界面

2015-06-29

如何写菜单

本文介绍了菜单的基本写法,后面有自定义菜单和上下文菜单的介绍

2015-06-29

下拉刷新上拉加载控件 pullrefreshlistviewdemo

本文详细讲解了下拉刷新、上拉加载控件的写法,注释很详细

2015-06-27

HorizontalScrollView和ViewPager联动效果

HorizontalScrollView和ViewPager联动效果,实现点击顶部标签下面内容切换

2015-06-19

下拉刷新上拉加载(使用第三方控件)

很好的第三方控件,支持下拉刷新上拉加载 支持滚到底部自动加载及手动上拉才刷新的选择

2015-06-17

GridView的标准写法

基本的GridView写法,很简单的写法,要写20个字

2015-06-17

轮播图的写法之二(功能全实现)

/** * 1.实现了轮播图自动滚动效果<br> * 2.设置了跟随页面变化的小点点<br> * 3.解决了轮播图手指滑动后,显示页面错位的问题<br> * 4.实现了手指按住轮播图时,停止自动滚动的效果<br> * 5.实现了点击轮播图,跳转到相关页面的操作<br> */

2015-06-17

轮播图的写法之一(基本写法)

使用ViewPager实现轮播图,最基本的写法

2015-06-17

空空如也

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

TA关注的人

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