自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

keke8021

编织未来&&程就梦想

  • 博客(63)
  • 问答 (1)
  • 收藏
  • 关注

原创 Material Design主题(一)

Material Design现在有三种默认的主题可以设置: @android:style/Theme.Material (dark version) @android:style/Theme.Material.Light (light version) @android:style/Theme.Material.Light.DarkActionBar我们可以以这三个Theme来定义我们的Th

2016-10-16 19:10:51 658

原创 Android的性能优化(下)

应用APP内存的使用,也是评价一个应用性能高低的一个重要的指标。所以不管什么样的应用,都应该把内存效率,用户体验放在首位。 由于Android应用的沙箱机制(一种安全机制),每一个应用分的的内存大小是有限度的,内存太低就会触发LMK(low memory killer)机制,先来简单的说说手机的内存吧:寄存器 寄存器拥有非常高的读写速度,速度最快的存储场所,因为寄存器位于处理器内部,在程

2016-10-10 22:31:21 829

原创 Android的性能优化(上)

1.Android UI的渲染机制当我们感觉到的流畅画面,需要的画面帧数要达到40帧到60帧每秒。而一帧的时间大约是16.67ms,换句话说,在1000ms的时间内,16.67ms大约就是现实60帧画面的单位时间。在Android系统中,系统是通过VSYNC信号触发对UI的渲染的,如果系统每次渲染的事件都保持在16.67ms以内,那么我们看到的UI界面将是非常的流畅的,这也就需要我们将所有程序的逻辑

2016-09-22 00:03:47 3131

原创 Android APK的加密

由于java字节码的特殊性,使得他非常容易进行反编译,为了对Class文件进行一些保护,通常会使用ProGuard来对apk进行混淆代码,用无意义的字母来重命名类,字段,方法和属性,当然,ProGuard不仅仅可以用来混淆代码,还可以用来删除无用的类,方法,字段和属性,以及删除没用的注释,最大限度的优化字节码文件。在Android Studio中,可以非常方便的使用ProGuard,在Gradle

2016-09-08 22:34:29 1348

原创 Activity与Activity调用栈分析

Activity是与用户交互的第一接口,它提供的是一个用户完成指令的窗口。当我们创建Activity之后,通过调用setContentView(View)方法来给该activity指定一个显示的界面,并且以此为基础提供给用户交互的接口。系统采用Activity栈的方式来管理Activiity。1.Activity的形态Activity拥有多种形态,它可以在多种形态中进行切换,以此来控制自己的生命周期

2016-08-14 19:21:19 634

原创 Android属性动画分析

在Android3.0之后,Google推出了属性动画的框架来帮助开发者实现更加丰富的动画效果。而在Animator框架中使用最多的就是AnimatorSet和ObjectAnimator的配合。使用ObjectAnimator进行精细化的控制,只控制一个对象的属性值,而使用多个ObjectAnimator组合到AnimatorSet形成一个动画,属性动画通过调用属性的get,set方法来真实的控制

2016-08-07 19:06:06 541 5

原创 Android View的动画机制

Animation框架定义了透明度,旋转,缩放和位移几种常见的动画,而且控制的是整个View,实现原理是每次绘制视图时View所在的ViewGroup 中的childView函数获取该View的Animation的Transformation值,然后调用canvas.concat(transformToApply.getMatrix()),通过矩形矩阵 运算完成动画帧。如果动画没有完成,就继续调

2016-08-07 16:13:18 359

原创 SurfaceView与View的区别

Android系统提供了View进行绘图处理,View可以满足大部分的绘图需求,但是在某些时候,却也是心有力而力不足,我们知道View通过刷新来进行重绘图,Android系统通过发出VSYNC信号来进行屏幕的重绘,刷新的时间为16ms,如果子啊16ms内view完成了你所要执行的所有操作,那么用户在视觉上就不会产生卡顿的感觉,而如果执行的操作逻辑过多,特别是需要频繁刷新的街面上,例如游戏界面,那么就

2016-08-02 19:34:41 403

原创 canvas.save()和canvas.restore()的区别

1.canvas.save(),字面上理解就是保存画布,它的作用是将之前的所有的已经绘制的图像保存起来,让后续的操作就好像在新的图层上操作一样,这一点与photoshop中的图层理解是一致的。2.canvas.restore(),可以理解是photoshop中的图层合并的操作,他的作用是我们在save()之后绘制的所有图像与sava()之前的图像进行合并。

2016-08-02 18:36:41 361

原创 Android_RecyclerView的用法

recyclerview

2016-07-27 00:40:21 535

原创 Android XML绘图

1.Shape在XML中使用Shape可以绘制各种不同的形状,,代码如下: 注意:在创建shape文件的时候要将工程切换到project模式下。shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="ring"> corners andro

2016-07-03 08:51:41 387

原创 Android绘图机制(一)

1.系统提供了Canvas对象来提供绘图方法,里面有各种绘制图像的API,如drawPoint(点)、drawLine(线)、drawRect(矩形)、drawArc(弧)、drawCircle(圆)。Paint作为画笔,提供了多样的方法设置画笔的属性。 Paint paint = new Paint(); paint.setAntiAlias(true); //是否设置画笔的锯

2016-06-29 22:38:13 489

原创 Android屏幕相关知识(一)

1.Android手机屏幕的分辨率和尺寸大小不一,千奇百怪,这在我们自定义view以及做屏幕适配的时候造成了一定的困难,要想高效的解决遇到的问题,需要我们毒地手机屏幕有一定的认识。2.屏幕参数1.屏幕大小:指的是屏幕对角线的长度,用“寸”来表示,比如我们所说的4.7寸,5.5寸的手机。2.分辨率:指的是手机屏幕的像素点个数,例如720x1080就是指的屏幕的分辨率,指的是宽有720个像素点,高有10

2016-06-28 23:54:51 302

原创 Android Scroll(四)----ViewDragHelper

1.Google在其support库中为我们提供了DrawerLayout和SlidingPaneLayout两个布局来帮助开发者实现侧边栏滑动的效果。但是在这两个布局的背后,却隐藏着一个功能强大的类–ViewDragHelper。通过ViewDragHelper可以实现各种不同的滑动,拖放。2.下面我们来创建一个类似于QQ滑动侧边栏的布局,初始时显示内容界面,当用户手指滑动超过一段距离时,内容界面

2016-06-22 00:26:16 424

原创 Android Scroll分析(三)----Scroller

1.通过scroller类可以实现平滑移动的效果,而不是瞬间完成的移动。scroller的实现原理与scrollBy与scrollTo方法来实现子view跟随手指移动的原理基本类似。虽然scrollBy()是让子view瞬间从某点移动到另一个点,但是由于在ACTION_MOVE事件中不断获取手指移动的微笑的偏移量,这样就将一段距离划分成了N个非常小的偏移量。在每个偏移量里面通过scrollBy方法进

2016-06-18 18:17:22 379

原创 Android Scroll分析(二)——滑动的几种方法

1.实现滑动的基本思想是当触摸view的时候,系统记录当前触摸点的坐标,当手指移动的时候,系统记录下移动后触摸点的坐标,从而花去到相对于前一次的偏移量,并且通过偏移量来修改view的坐标,这样不断的重复,从而实现滑动的过程。2.下面通过一个实例来看看android是如何实现滑动效果的,自定义一个view,实现简单的布局。<?xml version="1.0" encoding="utf-8"?><

2016-06-18 16:14:24 488

原创 Android Scroll分析(一)

1.滑动一个view,实质上就是移动一个view,改变其所处的位置,原理与动画效果的实现非常相似,都是通过不断的改变view的坐标来实现这一效果。所以要实现view的滑动,就必须监听用户的触摸事件,并且根据事件传入的坐标,动态且不断的改变view的坐标,从而实现view随用户的滑动而滑动。2.Android坐标系在Android中,将屏幕的最左上角的顶点作为Android坐标系的原点,从这个点向右是

2016-06-13 23:53:00 582

原创 ListView的使用技巧集合(五)

1.动态改变listview的布局通常情况下,如果要动态的改变点击item的布局达到一个Focus的效果,一般有两种方法,一种是讲两种布局写在一起,通过控制不悲剧 显示和隐藏来达到切换布局的效果,另一种方法则是子啊getView()的是和,通过判断来加载不同的布局。两种方法个由于利弊,关键还是看使用的场合。下面以第二种方法实现这样的一个效果。1.设置两种不同的布局,根据item的位置不同来设置显示图

2016-06-12 22:44:32 413

原创 ListView的使用技巧集合(四)

1.聊天类型的Listview通常我们使用的listview的每一项都是一个相同的布局,而我们熟知的QQ,微信等聊天类型的APP,在聊天界面都会至少有两种布局,即收到的的消息和发送的消息,其实这样的效果也是通过listview来实现的。要实现listview的布局呈现不同的效果,就需要对listview中的Adapter进行动手。在定义BaseAdapter的时候,需要先去重写getView()的方

2016-06-11 20:25:11 378

原创 ListView的使用技巧集合(三)

当原生的listview不能满足用户在审美,功能上不断提高的需求时,我们就需要对原生的listview进行自定义。1.具有弹性的listiew玩过iOS的朋友都会注意到它所有的列表都是具有弹性的,即滚动到底部或者是顶部的时候都会继续向下滑动一段距离。Android在5.X以后,为列表添加了一个半月形的阴影效果。网上也有很多来重写listview来实现弹性的效果,比如说增加一个headerView或者

2016-06-09 17:50:49 494

原创 Android系统的目录结构

了解Android系统中各个文件夹的目录结构对于我们定制特定的系统有很大的帮助,下面是系统各个文件夹的作用。/system/app/ 存放的是系统的app/system/bin/ Linux自带的组件/system/build.prop 记录的是系统的属性信息/system/font 系统字体存放目录root后可下载TTF字体替换原来的字体,达到修改系统字体的效果/system/framework/

2016-06-08 00:09:13 720

原创 ListView的滑动监听(二)

1.listview的滑动监听方法主要有两个:一个是OnTouchListener,另一个是OnScrollListener来实现监听。2.OnTouchListenerOnTouchListener是view中的监听事件,通过监听ACTION_DOWN,ACTION_MOVE,ACTON_UP这三个事件发生时的坐标,就可以根据坐标判断用户滑动的方向,并在不同的事件中进行相应的逻辑处理。listV

2016-06-05 20:58:29 539

原创 ListView的使用技巧(一)

1.listview在5.X时代已经被RecycleView逐渐取代,但listview的用处依然广泛。2.ListView的优化技巧public class ListAdapter extends BaseAdapter { private List<String> mStringList; private Context mContext; public ListAdapte

2016-06-05 16:20:19 319

原创 事件分发拦截机制

参考链接:http://blog.csdn.net/pi9nc/article/details/9281829#t11.了解Android系统的事件拦截机制需要先了解触摸事件,Android触摸事件封装了一个类——MotionEvent.在MotionEvent中我们可以通过event.getY()、event.getX()或者是event.getRawY()、event.getRawX()获取到触

2016-06-05 11:22:23 468

原创 自定义动态的音频条形图

1.思路:1.制作静态的条形图就是绘制一个个的矩形,每一个矩形之间进行一定量的偏移即可;2.制作动态的需要对矩形进行一个重新绘制。2.具体实现1.在ondraw()方法中进行矩形坐标的计算。制定一定的矩形的个数,通过循环创建小矩形。利用随机数,生成随机的矩形的高度即rectItemHeight ,通过横坐标的不断平移绘制出静态的小矩形。 @Override protected void

2016-05-30 21:55:08 2073

原创 自定义CircleProgressView控件

1.思路:1.自定义中间的圆形,2.自定义中间显示的文字;3.自定义外圈的弧线。2.代码实现:package com.best.keke.circleprogressdemo;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.

2016-05-29 22:03:01 740

转载 volley源码分析

转载:http://www.chengxuyuans.com/Android/90526.html.源码分析仅知道如何使用那是远远不够的,我们应该分析源码看其内部实现原理,这样才能够进步。        1.主线首先我们从整体上把握volley的工作流程,抓住其主线。(1)请求队列(RequestQueue)的创建创建请求队列的工作是从Volley#newRequest

2016-05-22 15:21:12 392

转载 Volley 源码解析

原文来自:http://www.codekk.com1. 功能介绍 1.1. VolleyVolley 是 Google 推出的 Android 异步网络请求框架和图片加载框架。在 Google I/O 2013 大会上发布。名字由来:a burst or emission of many things or a large amount at once 发布演讲时候的

2016-05-22 14:53:43 411

原创 Volley的用法

1.volley是android上的网络通信库2.volley通信的特点:1.通信更快更简洁2.可以处理get/post网络请求以及网络图像的高效率的异步请求3.可以处理网络请求图片的加载和缓存4.可以取消请求5.和activity生命周期的联动,activity销毁后,请求同时关闭。6.不适合做上传和下载的的操作3.请求的对象有:StringRequest,JsonObjectRequest,Js

2016-05-22 00:47:58 382

原创 Invalidate和postInvalidate

Android中实现view的更新有两组方法,一组是invalidate,另一组是postInvalidate,其中前者是在UI线程自身中使用,而后者在非UI线程中使用。Android提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在线程中调用,因为他是违背了单线程模型:Android UI操作并不是线程安全的,并且这些操作必须在UI线程中调用。   Android程序中

2016-05-19 23:51:23 312

转载 Shader颜色渲染

Android Api中关于颜色渲染的几个重要的类:   Shader,BitmapShader,ComposeShader,LinearGradient,RadialGradient,SweepGradient看一下它们之间的关系:  public class Shader extends Object 该类作为基类主要是返回绘制时颜色的横向跨度。其子类可以作

2016-05-19 23:38:22 335

原创 对现有的控件进行拓展,以TextView为例,为文本加彩虹渐变效果

1.自定义控件有一个方法是在原生控件的基础上进行的拓展,增加新的功能,修改显示的UI等,一般我们可以子啊onDraw()方法中队原生的控件进行的拓展。2.下面以为textvew的背景增加更多的颜色为例:如何实现:当我们自定义的view继承TextView的后,若不重写onDraw()方法,则不会修改TextView的任何效果。 @Override protected void onDraw

2016-05-10 00:17:22 1587

原创 Android中自定义常用的三个对象解析(Paint,Color,Canvas)

Paint,Color,CanvasPaint:画笔对象,画图用的“笔” Color:颜色,相当于调料 Canvas:画布,现实中的纸板Paint 画笔常用的方法就是设置和获取到画笔的样式:paint.setStyle(); 设置画笔的风格,空心的或者是实心的paint.setColor(); 设置画笔的颜色paint.setStrokeWidth(); 设置边框线的宽度paint

2016-05-08 19:37:50 1584

原创 自定义带描述的ImageView

在values/attrs.xml文件中创建自定义的属性。设置了自定义的属性。<?xml version="1.0" encoding="utf-8"?><resources> <attr name="texttitle" format="string"/> <attr name="texttitlesize" format="dimension"/> <attr nam

2016-05-08 15:25:08 1757

转载 Android 坐标与宽高研究getLeft() getTop() getRight()和getBottom()

出自:http://blog.csdn.net/gzsword/article/details/7195997把view看做一个矩形,分别表示的是一个view的左边,上边,右边,下边距离他的父组件的距离。getRight() =getLeft() + getWidth()getBottom()= getTop() + getHeight()一、坐标研

2016-05-08 13:47:59 691

原创 HTTPS原理

什么是https?? https是既有安全目的的http通道,简单的说是在http的基础上进行的扩展,是基于SSL(security socket layer)/TLS的http.我们研究HTTPS,实际上就是研究SSL/TLS的加密协议。HTTPS主要是用来通讯双方身份的认证和通信的加密。主要用于互联网安全敏感通信上,比如金融行业的支付平台数据的传输等。看图说明什么是HTTPS的工作流程:

2016-05-07 23:20:10 413

原创 仿带噪点和横线的验证码自定义View

1.自定义view的步骤:a.在values/attrs.xml文件中创建自定义的属性;b.自定义view,在view的构造方法中获取到自定义的属性;c.重写onDraw()方法;d.重写onMeasure()方法。在values/attrs.xml文件中创建自定义的属性<?xml version="1.0" encoding="utf-8"?><resources> <attr n

2016-05-04 00:31:37 2231

转载 Android 深入理解Android中的自定义属性

博客出处:http://blog.csdn.net/lmj623565791/article/details/45022631; 1、引言对于自定义属性,大家肯定都不陌生,遵循以下几步,就可以实现:自定义一个CustomView(extends View )类编写values/attrs.xml,在其中编写styleable和item等标签元素在布局文件中CustomView使用自定义的属性

2016-04-28 00:07:25 316

原创 Android自定义属性

参考博客:鸿洋老师的博客http://blog.csdn.net/lmj623565791/article/details/450226311.自定义的步骤:a.自定义一个ArcMenu extends ViewGroup;b.在values/attr.xml中自定义属性,定义styleable和item属性; <!--位置信息--> <attr name="position">

2016-04-27 23:40:22 290

原创 getLayoutParams()方法和setLayoutParams()方法

参考来源:http://blog.csdn.net/liuhaomatou/article/details/22899925#comments 1. getLayoutParams()和setLayoutParams()方法的解析 a. getLayoutParams():/** * Get the LayoutParams associated with this vie

2016-04-23 00:25:16 9194

空空如也

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

TA关注的人

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