擅长Android ,J2EE开发 博客园地址:http://www.cnblogs.com/androidsuperman/p/7834762.html github地址: https://github.com/soyoungboy
前几天在群里面有人找圆形可颜色渐变进度条,其中主要的知识点是SweepGradient; mSweepGradient = new SweepGradient(240, 360, new int[] { Color.
1,继承自view,实现ondraw方法: 初始化画笔,TextPaint paint,并设置画笔属性: paint.setFlags(Paint.ANTI_ALIAS_FLAG):画笔抗锯齿。
前几天做项目中选择图片的过程中遇到高版本和小米手机出现无法选择和崩溃的问题,现在记录下来,后面出现同类问题,也好查找 1,定义常量: private static final int TAKE_PICTURE = 3; private static final int CHOOSE_PIC...
项目中涉及到gif图片的展示,原来使用的是gifview,但是当频繁的,加载过大图片的时候会出现OOM的问题,后来去github上面找相关的库: https://github.com/koral--/android-gif-drawable android-gif-drawable是比较好的,并...
Ripple 水波纹效果,也就是涟漪效果。 波纹效果有两种: 1,波纹有边界:波纹涟漪效果只是显示在控件内部 android:background="?android:attr/selectableItemBackground" 2,波纹超出边界:波纹涟漪效果不会被限制在控件内部 android:background="?android:attr/selectableItemBackgroundBorderless" 通过给布局文件里面添加如上代码,就可以比较灵活的控制涟漪效果的显示区域。
android 5.0 提供3种过渡动画: 进入 退出 进入退出包括如下效果: explode 分解:屏幕中间进出 slide 滑动:屏幕边缘进出 fade 淡出:改变透明度来添加或者移除视图 共享 changeBounds :改变目标视图布局边界...
Palette用来从图片资源中获取颜色内容。 下面是个对颜色值使用的工具类: public class PaletteUtils { public static int getColorWithDefault(Palette palette, int defaultColor) { Palette.
系统提供默认的三种主题样式 @android:style/Theme.Material (dark version) @android:style/Theme.Material.
ScrollView是解决布局过长的情况下使用,一遍其下面会有个顶部布局,我项目里面是RelativeLayout,但是RelativeLayout无论设置 android:layout_height="wrap_content" 还是 android:layout_height="match_content" 都无法解决RelativeLayout填充ScrollView整过view的情况,后来百度了下,发现在scrollview添加如下android:fillViewport="true"代码可以解决。
AActivity跳转BActivity ,AActivity设置lauchmode = "SingleTask"的话,在getIntent无法获取BActivity里面的内容,无论是通过Intent跳转还是BActivity里面setResult后在AActivity的onActivityForResult中获取都不行。
View树和UI界面架构图 UI界面架构图: android视图最外层是一个window对象。 phoneWindow来实现。 phoneWindow将一个decorView作为整个布局的根view. 屏幕分为TitleView和ContentView. ContentView的根布局为framelayout. view的测量: view的测量通过onMesure()来进行的: onMesure用来确定视图大小和位置。
今天项目中涉及fragment中嵌套多个fragment,但是要根据tag去展示对应的fragment,而不是默认展示的第一个fragment,如果使用activity很容易想到onpause(),onResume()中进行处理,但是你会发现fragment的onpause和onresume只调用一...
public class MyListView extends ListView { public MyListView(Context context, AttributeSet attrs, int defStyle) { super(context, att...
下面是重写ArrayList,并保证ChooseCars里面alpha字段不重复的例子 public class DistinctList extends ArrayList{ private static Map distinct_map = new HashMap()...
平时效果: 按下效果: selector代码: ...
方案1:经过验证,可以完美实现 Glide.with(context).load(url).asBitmap().centerCrop().into(new BitmapImageViewTarget(imageView) { @Override prot...
RelativeLayout 圆角实现: drawable目录下面定义shape的xml文件: mall_header_rel_bg.xml 代码里面通过如下代码引用 android:background...
叶子对象和组合对象实现相同的接口。这就是组合模式能够将叶子节点和对象节点进行一致处理的原因。 基本概念: 组合模式[构造性设计模式]定义了如何将容器对象和叶子对象进行递归组合,使得客户在使用的过程中无须进行区分,可以对他们进行一致的处理。
能够游走于聚合内的每一个元素,同时还可以提供多种不同的遍历方式。 基本概念: 就是提供一种方法顺序访问一个聚合对象中的各个元素,而不是暴露其内部的表示。 使用迭代器模式的优点: 遍历集合或者数组; 忽略集合和数组的结构; 提供不同的遍历方式; 符合单一职责原则。
基本概念: Command模式也叫命令模式 ,是行为设计模式的一种。Command模式通过被称为Command的类封装了对目标对象的调用行为以及调用参数,命令模式将方法调用给封装起来了。 命令模式的几个角色: Command: 抽象命令类 ConcreteCommand: 具体命令类 Invoker: 调用者 Receiver: 接收者 Client:客户类 命令模式的优缺点: 优点 1. 降低了系统耦合度 2. 新的命令可以很容易添加到系统中去。
装饰者模式又叫包装模式。 通过另一个对象来扩展自己的行为,在不破坏类的封装的情况下,实现松耦合,易扩展的效果。 抽象组件角色: 一个抽象接口,是被装饰类和装饰类的父接口可以给这些对象动态地添加职责。
看开源框架:https://github.com/tianshaojie/AndroidFine,里面有如下效果,特记录学习下,以后项目中用也好能够立刻想起来。 如上面所示,是常见项目中的图片轮训和展示效果,技术主要涉及到viewpager+photoview,那下面主要讲解如何在and...
android使用泛型的地方很多,比如集成自BaseAdapter实现封装的Adapter,对常用操作进行封装,但是需要对传进来的数据进行处理,此时就使用到泛型,示例如下: public abstract class EasyAdapter extends BaseAdapter { ...
主要使用https://github.com/jgilfelt/SystemBarTint这个开源库 1 ,导入SystemBarTintManager类 2 ,BaseFragmentActivity的onCreate添加如下代码: // 修改状态栏颜色,4.
和线程之间的关系: 进程:进程是程序的一次动态执行过程,他经理了代码加载,执行到执行完毕的一个完整过程,这个过程也是进程本身从产生,发展到最终消亡的过程。 线程:线程是实现并发机制的一种有效手段,进程和线程一样,都是实现并发的一个基本单元。
一般对于API请求需带上GZip压缩,因为API返回数据大都是Json串之类字符串,GZip压缩后内容大小大幅降低. public class GZipRequest extends StringRequest { public GZipRequest(int paramInt, String paramString, Response.
Volley之https信任所有证书实现: public class HttpsTrustManager implements X509TrustManager { private static TrustManager[] trustManagers; private...
前面http://www.cnblogs.com/androidsuperman/p/8a157b18ede85caa61ca5bc04bba43d0.html 有讲到使用LRU来处理缓存的,但是只是处理内存里面的缓存,没进行文件缓存和处理,那么如何实现Volley在本地的缓存呢 一般硬盘缓存使用com.
json解析工具类的引入,这里引用lite马天宇的解析json的工具类: public class GsonImpl extends Json { private Gson gson = new Gson(); @Override public String toJson(Object src) { return gson.
List接口:可以存放重复内容; set接口:不能存放重复内容,重复内容依靠hashcode和equal两个方法来区分; Queue:队列; SortedSet接口:对集合中的数据进行排序; List接口: List子类:ArrayList,Vector ArrayList和Vector的区别: LinkedList类和queue接口 LinedList 链表的操作类 Queue接口是Collection的子接口 Set接口: Set接口是collection接口的子接口,但是和Collection或者List接口不同的是:set不能加入重复元素。
1,及时回收bitmap,在activity的onstop()和onDestory()里面调用如下代码进行bitmap的回收: // 先判断是否已经回收 if(bitmap != null && !bitmap.
首先,虽然大家都知道,还是提一下,利用好 convertView 来重用 View,切忌每次 getView() 都新建。ListView 的核心原理就是重用 View。ListView 中有一个回收器,Item 滑出界面的时候 View 会回收到这里,需要显示新的 Item 的时候,就尽量重用回收器里面的 View。
在Volley的使用之加载图片讲过使用NetWorkImageView进行图片加载的例子,本文着重讲解NetWorkImageView内部是如何实现的,以及Volley这个控件有什么特性。 1,通过几个构造方法,可见NetworkImageView并没有添加自己的自定义属性,而是继承自Imageview的自定义属性。
定义了对象间的一种一对多依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。 Observer模式提供给关联对象一种同步通信的手段,使某个对象与依赖它的其他对象之间保持状态同步。
进程和线程的概念: 进程:程序的运行实例。 线程:cpu调度基本单位。 Activity启动的时候,启动一个主线程,两个binder线程。 主线程实如何产生的?ZygoteInit启动,经由一系列调用后最终zygote为activity创建主线程-->ActivityThread. 用于binder的哪些线程什么时候创建? 1,service也是寄存在ActivityThread,并且启动流程和activity基本一致。
开源代码viewpagerindicator里面没有实现tab下划线切换过程中的移动动画,都是很突兀的多个fragement之间的切换,导致用户体验略差,google了下相关问题,发现一片博文: http://blog.
RelativeLayout Vs LineLayout 尽可能的使用RelativeLayout,不要使用绝对布局AbsoluteLayout,在布局层次一样的情况下,建议使用LineLayout代替RelativeLayout,因为LineLayout性能要稍高一点,但往往RelativeLayout可以实现LineLayout嵌套才能实现的布局。
Volley加载图片有两种方式: 1,ImageRequest 来对网络图片进行请求,放入请求队列,获取后现在在控件上面。 2,NetworkImageView 最为自定义控件来自动加载网络图片。 3,imageloader,对图片大小,质量格式控制来按需加载图片。
最近项目写完,有开始新的学习了,volley很久以前就接触了,也看了源码,然而却没有通过文章去记录自己的学习成果。 首先讲下volley的特点: 1,扩展性强。Volley 中大多是基于接口的设计,可配置性强。
一般不优化的adapter通常继承自BaseAdapter会出现一下几个问题: getCount(), getItem(), getItemId()代码都要去重写,一个adapter还行,如果adapter越来越多的话,每个adapter都这么写就超级恶心了。
代码里面发送粘性事件代码如下: // 发送Sticky事件 EventBus.getDefault().postSticky(new User("soyoungboy", "西安财经学院"), "soyoungboy"); ...
代码里面注销eventbus一般我们会在onDestory里面这么写: 1 EventBus.getDefault().unregister(this); 然后走到unregister里面去看看: 1 /** 2 * @param subscrib...
1,分析androidEventbus的注册源代码: 我们在使用androidEventbus的第一步是注册eventbus,如下代码: EventBus.getDefault().register(this); 首先获取eventbus对象,采用单利模式实现获取对象: Eventbus.
今天阅读队友代码,调试代码中,发现对话框弹出点击back按键无法返回问题解决。 代码如下: /** * 单个按钮没有标题的弹框 * * @param context * @param content内容 * @param btnS...
发送和接收消息的方式类似其他的发送和接收消息的事件总线一样,不同的点或者应该注意的地方: 1,比如在子线程构造方法里面进行实现总线的注册操作; 2,要想子线程中接收消息的功能执行,必须启动线程。 3,添加tag和不添加tag类似其他。
这个和普通的事件总线的发送接收一样。 1 package com.example.mysimpleeventbus; 2 3 import java.util.ArrayList; 4 import java.
1,不同Activity直接发送Ansy的事件,以及其他任何事件,必须通过 postSticky方式来进行事件的传递,而不能通过post的形式来进行传递:EventBus.getDefault().postSticky(newUser("soyoungboy","西安财经学院"),"soyoungboy");。
最近再看eventbus相关代码,首先从使用开始,后期再从源码角度分析eventbus.使用Demo后期公布到github上去。 使用的框架地址:https://github.com/bboyfeiyu/AndroidEventBus Sticky 事件 使用例子: 1,首先每个Activity或者fragement都要进行eventBus的注册和反注册。
This is a build path issue. Make sure your bin folder is not included in your build path. Right click on your project -> go to properties -> Build Path.
Python学习 学习站点:https://www.shiyanlou.com/1 hello world code如下: $ python [15:50:40] Python2.