Android学习
文章平均质量分 67
cxmscb
学生
展开
-
安卓开发之自定义带加载进度的按钮ProgressButton
demo按钮效果图:一、定义ProgressButton的自定义属性在attrs文件中定义ProgressButton的基本属性:主要有进度条颜色、进度条的背景颜色、按钮正常和被点击状态时的颜色、按钮的边角半径和是否显示进度信息。<declare-styleable name="progressbutton"> <attr name="progressColor" format="color原创 2016-09-10 10:37:45 · 12793 阅读 · 3 评论 -
安卓开发之<include /><merge /><viewstub />的使用
include<include/> include 一般用来重用布局文件,当每个界面都包含一些相同的元素时,可以使用include将相同的元素取出。例如<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" andro原创 2016-04-16 10:57:11 · 716 阅读 · 0 评论 -
安卓开发之消息机制和AsyncTask实现的基本原理
一、基本概述在Android中,只可以在UiThread(UI主线程)才可以直接更新界面,不然会抛出异常。 WHY: 防止多个线程来修改界面,导致混乱 通过同步锁来防止界面混乱会导致性能降低 。在Android中,长时间的工作(比如联网)都需要在workerThread(分线程/工作线程)中执行。在分线程中获取服务器数据后,可通过消息的传原创 2016-07-08 20:36:24 · 2422 阅读 · 0 评论 -
安卓开发之自定义动画控件BatteryView(电池加载动画)
前几天在网页上看到一个不错的加载动画View后,想将它在安卓上实现一遍。效果如下,很简单。因为控件实现动画时,更新视图的频率会很高。为了减少内存的占用,决定使用SurfaceView来实现。一、对控件的测量使用的规则是:当控件的宽/高不是固定时,宽/高的大小为默认的宽高+padding值。反之,使用传递过来的宽高。@Overrideprotected void onMeasure(int widt原创 2016-09-23 12:11:02 · 4801 阅读 · 0 评论 -
安卓开发之getMeasuredWidth和getWidth的区别
一、getMeasuredWidth() : 可以先看一下View / ViewGroup关于 getMeasuredWidth 这个函数的源码:public final int getMeasuredWidth() { return mMeasuredWidth & MEASURED_SIZE_MASK;}其中 mMeasuredWidth 是由我们在View的onMeasure原创 2016-09-19 17:12:58 · 1191 阅读 · 0 评论 -
安卓之插件化开发使用DexClassLoader&AssetManager实现功能插件化
在360安全卫士一些应用中,有些功能需要添加(下载)后才可以运行,例如360安全卫士中的抢红包功能。 这是因为这些功能被插件化分离出来成一个apk/zip文件,当用户使用这些功能时,再去下载相应的插件(不安装插件apk)来实现功能,当然也可以删除掉插件文件来实现删除功能的效果,实现了功能的热插拨。 Demo项目的效果图:【开始时 主应用本身未实现“红包助手”功能,然后点击按钮“添加并运行”原创 2016-09-06 23:54:15 · 1788 阅读 · 0 评论 -
安卓之插件化开发使用DexClassLoader&AssetManager来更换皮肤
这篇文章主要使用DexClassLoader来实现插件化更换皮肤,即将皮肤独立出来做成一个皮肤插件apk,当用户想使用该皮肤时需下载(不需要安装)对应的皮肤插件apk效果图【为方便测试,主要通过改变背景图来简单地展示皮肤更换】一、DexClassLoader 如果使用DexClassLoader来实现插件化皮肤更换,我们需要去下载(不需安装)我们的皮肤插件apk:DexClassLoader原创 2016-09-06 11:08:05 · 2825 阅读 · 0 评论 -
安卓开发之服务Service
一、Service是什么?Service是一个应用组件,它用来在后台完成一个时间跨度比较大的工作,且没有关联任何界面。(生命周期在应用程序进程的主线程运行)一个Service可以完成的工作:访问网络(在Service中启动分线程)、播放音乐、文件IO操作、大数据量的数据库操作等。如果需要在Service中处理一些网络连接等耗时的操作,那么应该将这些任务放在分线程中处理,避免在主线程中阻塞用户界面原创 2016-07-14 12:49:07 · 7707 阅读 · 1 评论 -
安卓开发之ViewDragHelper的使用及自定义可下拉展示内容的ViewGroup
一、ViewDragHelper 一个自定义ViewGroup的工具类,它提供了许多有用的方法和状态允许用户去拖拽和绘制子View在自定义ViewGroup中的轨迹和位置。ViewDragHelper的创建;ViewDragHelper可以使用静态方法创建一个实例:ViewDragHelper.create(ViewGroup forParent,int sensitiveity,ViewDra原创 2016-08-22 20:29:43 · 2431 阅读 · 0 评论 -
安卓开发之Activity的4种启动模式
四种启动模式Activity的启动模式有4种,分别为standard、singleTop、singleTask、singleIntance。4种启动模式的区别主要与Activity的任务栈管理有关,栈是一种后进先出的集合。Activity启动模式的设置在AndroidManifest.xml中 ,注册Activity时可以设置Activity启动模式, android:launchMode=”” ,原创 2016-07-01 12:02:21 · 1207 阅读 · 0 评论 -
安卓开发之Volley的基本使用
一、Volley概述Volley是Android上的一个网络通信库,能使网络通信更简单健壮。Volley适合数据量不大但通信比较频繁的场景。二、相关APIRequestQueue:请求队列,会自动执行队列中的请求Volley.newRequestQueue(context):创建一个请求队列addRequest(Request request):将请求添加到队列中处理Request:请求原创 2016-07-25 00:32:57 · 1295 阅读 · 0 评论 -
安卓开发之自定义粒子旋转动画加载控件
先上效果图:控件可以根据颜色数组的长度来绘制不同数量的小球。小球旋转同时,距控件中心的距离也跟着不断变化。还有个小细节就是,小球的颜色也会随着变化(颜色变为后一个小球的颜色)。一、自定义控件的属性定义了小球的半径、小球偏移控件中心的最大距离和最小距离、动画的执行周期(决定旋转的速度)和一个存放各个颜色的数组(int 数组)。<declare-styleable name="CircleLoading原创 2016-09-25 00:08:06 · 4792 阅读 · 0 评论 -
安卓开发之自定义控件实现画板
只实现了画板的绘制,画板的清除,画板的撤销(撤销上一步) 代码:package com.scb.cxm.drawingboard;import android.content.Context;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Color;import原创 2016-04-20 17:01:30 · 1815 阅读 · 2 评论 -
安卓开发之ListView优化方案
ListView优化方案 ListView中的优化一般通过减少getView中的耗时操作.Adapter中的优化 运用了convertView的回收视图,当convertView不为NULL时,就不需要再去解析视图。 还利用了viewholder模式,不用每次都去通过id查找控件findViewByID,而是将View保存在viewholder中,再通过convertView将vie原创 2016-04-13 17:38:24 · 791 阅读 · 0 评论 -
安卓开发之Fragment的使用与通信
什么是Fragment在应用程序中, 一个Fragment应该是一个模块化、可重用的组件。因为Fragment能定义其自己的布局和自己的行为利用自身的生命周期回调方法,可以在多个Activity中包括同一个Fragment,也可以在一个Activity中包含多个Fragment。可以把Fragment当成一个小Activity碎片(不仅仅是一个布局),Fragment拥有自己的生命周期和接收、处原创 2016-07-04 15:15:39 · 1034 阅读 · 0 评论 -
安卓开发之基于AccessibilityService实现聊天机器人对其他应用的调起
前言前几天看到一个很有趣的应用视频“小不点”交互机器人,其中有一段是用户给它发一段文字/语音,譬如“我想在美团点一份鸡排”,然后“小不点”自动将美团应用弹出,并进行“鸡排”搜索等操作,如下图进行简化后的demo所示。当时感觉到这样子的交互方式挺有趣的,在安卓上也有一定的方案可以实现,今天就基于AccessibilityService来实现了一下。(demo中省去一些自然语言处理的应用,最近也在学习这原创 2016-10-27 18:58:50 · 11655 阅读 · 4 评论 -
安卓缓存之LruCache及设计(异步+缓存)图片加载器LruCacheImageLoader
一、LruCache LRU:Least Recently Used(近期最少使用)。LruCache基于LRU算法的缓存策略。LruCache是一个泛型类,其以强引用的方式存储外界的缓存对象。当内存缓存达到设定的最大值时,则将内存缓存中近期最少使用的对象移除,有效的避免了OOM的出现。Java的四种引用一、LruCache的基本使用 LruCache一般使用来缓存图片,下面以缓存Bitm原创 2016-08-25 15:09:03 · 2586 阅读 · 3 评论 -
安卓开发之使用双进程守护和进程提权来实现服务进程保活
一、进程保活 在 如何让我们的Android应用进程保活? 这篇文章里总结了一些进程保活方法,下文以双进程守护和进程提权来保活我们的服务进程。双进程守护: 主要设计AB两个不同服务进程,A进程的服务轮询检查B进程的服务是否存活,没存活的话将其拉起,同样B进程服务轮询检查A进程服务是否存活,没存活的话也将其拉起进程提权 主要设计中调用 startForeground方法将service置为“原创 2016-09-01 19:37:58 · 14198 阅读 · 14 评论 -
安卓缓存之DiskLruCache及设计(异步+缓存)图片加载器DiskCacheImageLoader
DiskLruCache DiskLruCache是一套硬盘缓存的解决方案,算法同LruCache基于LRU算法。DiskLruCache不是由Google官方编写的,这个类没有被包含在Android API当中。这个类需要从网上下载可以到Github这里下载一、DiskLruCache的基本使用1. 初始化DiskLruCache//创建一个DiskLruCache的实例,需要调用它的ope原创 2016-08-26 21:42:47 · 2321 阅读 · 0 评论 -
安卓开发之样式和主题的使用与夜间/白天模式的动态转换
一、样式(Style) 在写布局时,当多个视图有不少相同的属性时,可以将这些相同的属性放在一起在styles.xml中自定义为一个style。在布局文件中 使用style=”@style/style_name”统一引用。 可以把样式理解为多个视图属性的集合。一、样式的作用复用视图标签属性,防止布局文件累赘。二、样式的目标针对窗口中的某些视图。三、样式的定义与继承在styles.xml原创 2016-08-17 16:47:07 · 2874 阅读 · 1 评论 -
安卓开发之自定义控件TipView仿QQ长按后的提示窗口
先上效果图:之前用手机QQ时,一直很觉得这个窗口提示挺不错的,今天将它大概地实现了一遍。首先是:提示窗口的三角下标是可以改变位置的,然后窗口中有很多小的item,item被点击时会显示出不同的颜色,同时三角下标的颜色也随着改变。然后是:提示窗口的item们会根据传入的坐标实现向上显示或向下显示。一、对TipView定义一些成员变量private static final int STATUS_DOW原创 2016-09-27 23:22:10 · 5309 阅读 · 6 评论 -
安卓开发之使用PathMeasure自定义加载动画控件
先上效果图:一、PathMeasure在绘制画布时,我们通常会使用Path对象来勾勒出绘制的路径,而PathMeasure可以让我们得到路径上的一些信息,比如获取路径上点的坐标,截取路径上的某一段小路径等。。它主要有既个方法:setPath(Path path, boolean forceClosed);与一个Path对象绑定,forceClose为true时,不管关联的Path是否是闭合的,都会原创 2016-10-01 23:27:47 · 1242 阅读 · 0 评论 -
安卓开发之自定义控件实现MaterialEditText
按照常规先展示效果图并说明:主要有以下几个效果:edittext中的内容为0时,标签不出现edittext中的内容不为0时,标签开始出现edittext获取焦点时,下划线的颜色/粗细会发生改变edittext失去焦点时,下划线同样发生改变,标签颜色也更改当限制输入字符个数时,右下角计数文字会进行计数超过个数后,下划线和计数文字颜色会发生变化一、继承EditText为保留EditText原创 2016-10-13 17:50:31 · 5301 阅读 · 1 评论 -
安卓开发之ScrollView嵌套ListView的一些问题和解决
在应用开发中,有一些情况需要在ScrollView中嵌套一个或多个ListView来实现,下面主要讨论一些嵌套过程中的问题和一些解决方案。一、ListView的高度不能完全展开这种情况是当ScrollView嵌套ListView时,ListView的高度设置为wrap_content时会产生,一般情况下ListView只显示的第一个Item。正常情况下,高度设置为“wrap_content”的Li原创 2016-09-15 21:21:26 · 15159 阅读 · 2 评论 -
安卓开发之onMeasure的使用
onMeasureonMeasure 一般在自定义View时使用,该方法指定自定义控件在屏幕上的大小。方法protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec)onMeasure传入的两个参数是由上一层控件(父控件)传入的,参数包含了大小和模式,需要通过int mode = MeasureSpec.getMode原创 2016-06-26 14:13:52 · 1500 阅读 · 0 评论 -
安卓之使用DexClassLoader&AssetManager启动插件的Activity实现功能插件化
前言: 写完 安卓之插件化开发使用DexClassLoader&AssetManager实现功能插件化 通过在宿主Activity中装载插件Fragment来实现功能插件化后, 在网上又看见了一篇比较插件化的文章 探秘腾讯Android手机游戏平台之不安装游戏APK直接启动法 通过偷换Activity上下文的方法启动了插件apk的Activity。 深受启发,所以就写了这遍文章使原创 2016-09-12 15:58:52 · 2025 阅读 · 0 评论 -
安卓开发之Activity的生命周期
Activity生命周期函数onCreate:这个函数会在Activity第一个被创建时调用,通常会在这个函数中完成Activity的初始化工作。这时候Activity还不可见。onStart:这个函数在Activity调用onCreate函数后被调用,此时Activity还处于不可见状态,这个函数在Activity可见之前被调用。onResume:这个函数会在Activity变得可见时调用。onP原创 2016-07-01 11:14:25 · 639 阅读 · 0 评论 -
Android开发之性能优化
一 . 代码优化(1)循环优化 List mlist = userManager.getUserList(); for(int i = 0;i<mlist.size();i++){ }以上的代码会一直去执行mlist.size()方法,可循环优化为for(int i=0,p=mlist.size();i<p;i++){}(2)尽量在使用时再实例化对象。NewObject object = new原创 2016-06-22 10:27:50 · 475 阅读 · 0 评论 -
安卓开发之网络请求HttpURLConnection
一、相关APIURL:包含请求地址的类URL(path):包含请求地址的构造方法openConnection():得到与服务器连接的对象HttpURLConnection:代表与服务器连接的类准备工作:setMethod(“GET”) / setMethod(“POST”):设置请求方式setConnectTimeout(time):设置连接超时时间,单位mssetReadTimeout(原创 2016-07-23 23:45:24 · 876 阅读 · 0 评论 -
安卓开发之自定义View通过Drawable绘制图标
//主要通过Drawable对象来绘制图标public class MyView extends View{ private float mCircleRadius; private int defaultStepIndicatorNum; private Drawable mIcon; private Rect rect; public MyView(Conte原创 2016-06-26 15:44:41 · 4683 阅读 · 0 评论 -
安卓开发之使用DashPathEffect来绘制虚线
原理:主要用到了PathEffect的子类 DashPathEffect方法:给画笔Paint对象设置绘制路径时的特效:.setPathEffect效果:DashPathEffect 构造方法的参数决定了绘制的路径效果:public DashPathEffect( float[] intervals, float phase )intervals是一个float数组,且其长度必须是偶原创 2016-06-25 22:35:00 · 9967 阅读 · 5 评论 -
安卓canvas
canvas图层与屏幕的关系屏幕 Canvas图层--> Canvas 画图 --> 图层覆盖在屏幕上显示 -->图层清理图层上的元素 ^ | |原创 2016-04-20 16:47:14 · 549 阅读 · 0 评论 -
安卓补间动画Tween Animation
补间动画:字面意思: 前后之间的动画.主要指控件两个形态之间变化的动画形态变化有:alpha 透明度的变化scale 缩放度的变化translate 平移点的变化rotate 旋转/角度的变化set 上面这些变化的套餐xml中构造补间动画 变化都有起始和结尾scale:android:fromXScale 起始x轴方向的缩放程度android:fromYScale andr原创 2016-04-28 17:17:13 · 772 阅读 · 0 评论 -
Android 自定义控件---SpreadView
1、效果图:主要模仿Fuubo这款应用的欢迎界面,一个三层扩散的水波纹. 2、实现思路: 1、在布局主要用帧布局,让三个水波纹的View重叠 2、设置三个水波纹的View扩散的延迟时间 3、可设置三个水波纹的View的坐标, 可设置是否开始(因为我们有时要原创 2015-09-14 17:00:53 · 1720 阅读 · 1 评论 -
Android ListView监听上滑、下滑、滑到顶部/底部
监听上下滑有两种方法: 1.用ListView的setOnScrollListener方法 private int lastVisibleItemPosition = 0;// 标记上次滑动位置,初始化默认为0 actualListView.setOnScrollListener(new AbsListView.OnScrollListener()原创 2015-09-19 23:26:50 · 9628 阅读 · 0 评论 -
Android开发:让TextView文字竖直显示
<TextView android:text="竖直显示" android:textColor="#ffffff" android:gravity="center" android:textSize="30sp" android:ems="1" androi原创 2016-04-12 20:15:38 · 18054 阅读 · 3 评论 -
如何让我们的Android应用进程保活?
一、线程 进程 应用默认情况下,一个应用的所有组件都运行在一个进程和线程(主线程MainThread)中。默认下,同一个应用的所有组件都运行在同一个进程中。当然也可以在manifest清单文件中设置组件运行的进程。 组件元素 activity、service、receiver、provider,都有一个process属性可以指定组件运行在哪个进程中。这个属性可以设置为每个组件运行在自己的进程原创 2016-08-14 15:28:35 · 8324 阅读 · 0 评论 -
安卓开发 获取手机状态栏的高度
返回单位:pxprivate int getStatusHeight(Activity activity) { int statusHeight = 0; Rect localRect = new Rect(); //通过最顶层View来获取 activity.getWindow().getDecorView().g原创 2016-05-12 11:09:58 · 1694 阅读 · 0 评论 -
安卓之插件化开发使用PathClassLoader来动态更换皮肤
这篇文章主要使用PathClassLoader来实现插件化更换皮肤 (将皮肤独立出来做成一个皮肤插件apk,当用户想使用该皮肤时需下载对应的皮肤插件)效果图:【主要通过改变背景图来简单地展示皮肤更换】一、PathClassLoader 如果使用PathClassLoader来实现插件化皮肤更换,我们需要去下载并安装我们的皮肤插件apk:Android中有两个ClassLoader分别为原创 2016-09-04 22:39:35 · 4354 阅读 · 0 评论 -
安卓开发之广播接收器BroadcastReceiver
一、广播Broadcast广播事件处理属于系统级的,可跨应用的事件处理。一个应用可以注册对应的广播接收器BroadcastReceiver接收广播,也可以发送广播Broadcast。广播事件机制是应用程序(进程)间通信的一种手段。二、相关APIContextsendBroadcast(Intent intent);:发送一般广播sendOrderedBroadcast(Intent in原创 2016-07-18 21:33:43 · 956 阅读 · 0 评论