自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(217)
  • 资源 (40)
  • 收藏
  • 关注

原创 Android Snackbar

②查看是否是NextSnackbar,如果是,更新数据,如果不是创建新的NextSnackbar。Snackbar的show()方法会调用SnackbarManager的show(int, Callback)方法,而mManagerCallback会回调Snackbar的showView()和hideView(int)方法。Snackbar snackbar = Snackbar.make(view, "这是一个snackbar", Snackbar.LENGTH_SHORT);

2023-11-02 20:11:06 464

原创 AnHookd Hook

这里主要注意点放在hook上,具体Activity插件化过程可以描述成A Activity要跳转到一个在Manifest.xml里没有注册过的B Activity,这个过程需要在AMS校验之前把跳转Activity目标从B Activity改成一个在Manifest.xml注册过的C Activity,然后在AMS校验之后再把C改成B,然后实现跳转逻辑。Hook译为“钩子”,就是在事件传送到终点前截获并监控事件的传输,像个钩子钩上事件一样,并且能够在钩上事件时处理一些自己特定的事件。

2023-10-17 17:15:08 202

原创 Android Activity Result API

自定义Contract需要继承自ActivityResultContract,其中I是输入的类型,O是输出的类型,并实现2个方法:createIntent和parseResult,输入类型I作为createIntent方法的参数,输出类型O作为parseResult方法的返回值。使用Activity Result API完全移除了对onActivityResult()方法的重写,而是通过调用registerForActivityResult()方法注册了一个对Activity结果的监听。

2023-07-27 19:50:27 688

原创 Android LockSupport

许可permit相当于1、0的开关,默认是0,调用一次unpark就会加1变成1,调用一次park会消费一个permit,也就是将1变成0,同时park立即返回。LockSupport就是引入了Unsafe类中的park()和unpark()方法,park()方法中的Parker类中有一个成员变量_counter就代表了许可,调用park()方法时,如果许可_counter大于0(表示许可可用),就把它设置为0,并且调用Linux线程下的pthread_cond_timedwait一直等待。

2023-07-20 12:12:06 164

原创 Android SPI

总结下hasNext方法的操作,就是根据全路径文件名,打开一个io流,读取里面配置,就是实现接口的实现类的全路径,返回一个包含全路径类名的String类型迭代器,迭代器存在值就返回true,并定义了nextName的值,方便nextService方法的调用。SPI在模块开发中会比较有用,不同的模块可以基于接口编程,每个模块有不同的接口实现类,然后通过SPI机制自动注册到一个配置文件中,就可以实现在程序运行时扫描加载同一接口的不同实现类,从而实现跨模块通信。源码中也用来了懒加载的思想,开发中可以借鉴。

2023-06-26 19:51:43 549

原创 Android设计模式—桥接模式

其中Window和PhoneWindow构成窗口的抽象部分,Window为抽象部分的接口,PhoneWindow为抽象部分的具体实现以及扩展,而WindowManager则为实现部分的基类,WindowManagerImpl为实现部分具体的逻辑实现,它使用WindowMangerGlobal通过IWindowManager接口与WMS进行通信,最终由WMS完成具体窗口的管理工作。是典型的桥接涉及模式。由于桥接模式实现了抽象和实现的分离,所以在实现桥接模式时,就可以实现动态的选择和使用具体的实现。

2023-06-25 16:03:41 956

原创 Android 调用系统隐藏的类和方法

注意:属性要全部写上(有UnsupportedAppUsage注解的,把注解删掉),可以把源码拷贝过来,然后把实现替代为throw new RuntimeException(“Stub!在查看类的时候,经常可以看到下面的代码,这个是编译通过,在最终调用的时候,会去找最终的系统实现类。可以看到这个类是隐藏的(@hide),不对外提供sdk的调用,所以不能直接去实例化。要保证创建的类和系统的包名一样,里面需要引用的其他类也要声明,写上。通过log可以看到,是可以获得到这个方法的。2.调用系统隐藏的类和方法。

2023-06-02 17:45:01 2395 1

原创 Android 易忽略小知识

请输入密码

2023-06-01 20:18:02 620

原创 Android javascript混合开发

该方法参数传入一个Java对象实例和一个字符串,该字符串是一个名字(interface name,注意此接口不是通常所说的那个用来实现的接口,而是传入的这个对象在JS中的别名),在JS代码中用此名字调用该Java对象的方法。Android在4.4之前并没有提供直接调用js函数并获取值的方法,所以在此之前,常用的思路是 java调用js方法,js方法执行完毕,再次调用java代码将值返回。注意,与JS代码绑定的的这个Java对象运行在另一个线程中,与创建它的线程不是一个线程。这里展示一个简单的交互示例。

2023-05-31 17:35:56 1488

原创 Android 架构模式

这里的响应式开发强调一种基于观察者模式的开发方式:View订阅ViewModel暴露的响应式接口,接收到通知后进行相应逻辑,而ViewModel不再持有任何形式的View的引用,减少耦合,提高了可复用性。ViewModel:解决了MVP的问题,使ViewModel和View之间不再依赖接口通信,而是通过LiveData、RxJava、Flow等响应式开发的方式来通信,即将数据以可观察对象的形式提供给View,View和ViewModel层分离,ViewModel不应该知道与之交互的View是什么。

2023-05-30 20:30:20 1007

原创 Android Jatpack--ViewModel

对于简单的数据,Activity可以使用onSaveInstanceState()方法来从onCreate()中恢复数据,但这个方法只适合可以序列化再反序列化的少量数据,而不适合较大的数据。ViewModel作为视图数据和界面的桥梁,用来存储与UI相关的数据,它通过lifecycle感知的方式存储和管理UI相关数据。①ViewModel的生命周期比创建它的Activity、Fragment的生命周期都要长,即ViewModel中的数据会一直存活在Activity/Fragment中。

2023-05-29 18:08:15 742

原创 Android MMKV

MMKV解决了SharedPreferences的以上问题,MMKV是基于mmap内存映射的移动端通用key-value组件,相对于SP而言,MMKV无论是在速度上还是在文件大小上都更具有优势,是一个很方便易用的框架。MMMKV无论是在写入性能还是在读取性能,都远远超越SharedPreferences和SQLite,尤其是在Android多进程key-value存储组件上MMKV是不二之选。//3. MMKV默认是支持单进程的,如果业务需要多进程访问,需要在初始化的时候添加多进程模式参数。

2023-05-23 19:57:01 1489

原创 Android Jetpack—LiveData和数据倒灌

当然,被绑定的组件响应LiveData是有一定的前提的,那就是LiveData数据发生变化,且组件处于活跃状态。可以看到,dispatchingValue方法中有个while循环,在while循环里面,由于initiator为null,所有走else分支的代码,这里又有个for循环,这个for循环是用来遍历mObservers中的observer对象的,然后通过considerNotify方法将遍历到的observer对象进行处理。开发过程中通常使用LiveData的子类,而不是去继承LiveData。

2023-04-27 17:21:10 988

原创 Android ViewStub

①对ViewStub的inflate操作只能进行一次,因为inflate的时候是将其指向的布局文件解析inflate并替换掉当前ViewStub本身(由此体现出了ViewStub“占位符”性质),一旦替换后,此时原来的布局文件中就没有ViewStub控件了,因此,如果多次对ViewStub进行infalte,会出现错误信息:ViewStub must have a non-null ViewGroup viewParent。//stub布局的加载有两种方式,一种是stub.inflate();

2023-04-06 19:15:41 1379

原创 Android Bitmap防止内存溢出

以Android4.4之后为例,先通过设置 options.inJustDecodeBounds为true来查询需加载的bitmap宽高,然后判断reuseBitmap是否符合重用,若符合则将其赋值给options.inBitmap属性,最终得到想要的bitmap,即重用了reuseBitmap的内存空间。三者的流重新解码成bitmap,可见bitmap所占内存大小并未发生变化。2)ARGB_4444(已废弃) :表示16位ARGB位图,即A占4位,R占4位,G占4位,B占4位,共占用2个字节。

2023-04-04 11:52:20 799

原创 Android Kotlin协程coroutine

一个协程被挂起时,线程可以执行其它子程序,从而达到线程高利用率的多任务处理目的——协程在一个线程上执行多个任务,而传统线程只能执行一个任务,从多任务执行的角度,协程自然比线程轻量。由于这样启动的协程存在启动协程的组件已被销毁但协程还存在的情况,极限情况下可能导致资源耗尽,因此并不推荐这样启动,尤其是在客户端这种需要频繁、创建销毁组件的场景。LAZY是只有触发了,才会执行;没有中间的asyncJob1.await()时,运行结果可能任务2在前,也可能任务1在前,因为两个任务是在两个不同的线程里并行执行的。

2023-03-30 15:26:24 600

原创 Android MVVM

开发者只需要在View的模版语法当中,指令式地声明View上的显示的内容是和Model的哪一块数据绑定的。它不持有View层的引用,这一点跟MVP的P层不相同,MVP的P层会通过View层暴露的接口间接地“持有”对UI控件的引用,而ViewModel层则是完全不会引用到View层的UI控件。也就是说,MVVM把View和Model的同步逻辑自动化了。因为同步逻辑是交由Binder做的,View跟着Model同时变更,所以只需要保证Model的正确性,View就正确,大大减少了对View同步更新的测试。

2023-03-22 19:22:50 555

原创 Android DataBinding

首先定义一个静态方法,并添加BindingAdapte注解,注解值即为ImageView控件自定义的属性名,而该静态方法的两个参数可以这样来理解:当ImageView控件的url属性值发生变化时dataBinding就会将ImageView实例以及新的url值传递给loadImage()方法,从而可以在此动态改变ImageView的相关属性。控件的获取方式类似,但首字母小写。以上实现数据绑定的方式,每当绑定的变量发生变化的时候,都需要重新向ViewDataBinding传递新的变量值才能刷新UI。

2023-03-21 17:29:48 1487

原创 Android JNI

而.在C里面有特殊的函数,所以JVM就将它替换成了_,并在前面加了Java_标识,就变成了上面的方法。这个结构体和线程相关,并且C函数里面的线程与java函数中的线程是一一对应关系,也就是说如果在java里的某个线程调用jni接口,不管调用多少个JNI接口,传递的JNIEnv都是同一个对象。在调用System.loadlibrary函数时,JVM会回调上面的JNI_OnLoad函数,就是在这个函数里通过env->RegisterNatives进行的动态注册,其中env是jni函数实现的核心。

2023-03-20 20:13:21 676

原创 Android Window、WindowManager、WMS

1.窗口Window在Android中显示一个界面,首先想到的是Activity、Dialog或Toast。但是在有些情况下,比如悬浮球,用Activity显然多余,这个时候可以使用窗口来实现。整个Android的窗口机制是基于WindowManager接口的,这个接口可以添加view到屏幕,也可以从屏幕删除view。它面向的对象一端是屏幕,另一端就是View,直接忽略Activity或Dialog(其实Activity和Dialog的底层实现也是通过WindowManager)。WindowM

2023-02-26 18:53:27 2014

原创 Android ServiceManager○

1.ServiceManagerServiceManager在init进程启动后启动,用来管理系统中的Service。一般开机过程分为三个阶段:①OS级别,由bootloader载入linux内核后,内核开始初始化,并载入built-in的驱动程序,内核完成开机后,载入init process,切换至user-space后,结束内核的循序过程,进入排成模式。②Android-level,由init process开始,读取init.rc,Native服务启动,并启动重要的外部程序,例如ser

2023-02-22 20:36:50 1309

原创 Android .9图

1.点九图Nine Patch Drawable Grahpic点九图是安卓独有的切图格式,主要针对界面中所有可拉伸的圆角矩形。它的用处就是用于拉伸切图的。比如开发提示气泡时,要求气泡随着用户输入文本的长短或者终端屏幕的尺寸大小,产生长度、高度的自由变化,但是气泡本身并不失真。这是因为拉伸动作只存在于四个圆角外的部分,所以不论输入多少文本、横屏竖屏、手机还是平板,都可以很好得自适应。.9图的优势:.9图可以进行拉伸,如水平、竖直方向的延长,而清晰度不变;令一张图片实现多种拉伸效果,

2023-02-17 13:21:52 1574

原创 Android Handler之阻塞机制epoll

1.Linux epollepoll全称eventpoll(poll译为投票数、计票),是Linux内核中的一种可扩展IO事件处理机制,能够提高应用程序同时有大量IO操作请求时的性能,它是Linux I/O多路复用的其中一个实现(除了epoll外,还有select和poll)。那么linux系统是如何处理IO事件的呢?一般当系统同时发起多个IO事件请求时,Linux需要轮询所有事件,处理每个事件对应的事件流。由于系统中链接Linux内核的IO事件太多了,每一次轮询都需要耗费大量的时间和资源。

2023-02-07 20:01:55 1964

原创 Android 屏幕刷新机制 VSync+Choreographer

1.显示系统基础知识一个典型的显示系统一般包括CPU、GPU、Display三部分,其中CPU负责计算帧数据,并把计算好的数据交给GPU,GPU会对图形数据进行渲染,渲染好后放到图像缓冲区buffet里存起来,然后Display(屏幕或显示器)负责把buffer里的数据呈现到屏幕上。如下图:这里涉及几个基础概念:①屏幕刷新频率指一秒内屏幕刷新的次数,即一秒内显示了多少帧图像,单位是赫兹Hz。常见的屏幕刷新频率是60Hz。注:刷新频率取决于硬件的固定参数,不会变的。②逐行扫描显

2023-02-02 12:40:30 1360

原创 Android 分区存储

1.Android存储Android存储分为内部存储和外部存储(外部存储并不是指SD存储卡或外部硬盘)。①内部存储用于Android系统本身和应用程序的存储区域,比如手机的/system/、/data/等目录。 如果没有这一块存储区域是无法运行Android系统和应用程序的。其中data/data/包名/XXX是Android系统提供给app存储数据的内部存储空间,由app创建的SharedPreferences、Sqlite数据库、缓存文件等都保存在该文件夹中。该目录只能由该app自身访问

2023-01-31 20:02:43 2775

原创 Android ANR触发机制(二)

上一篇文章看了Service的ANR触发流程,现在看一下其他三种ANR触发流程。1.BroadcastReceiver触发ANRBroadcastReceiver超时是位于ActivityManager线程中的BroadcastQueue.BroadcastHandler收到BROADCAST_TIMEOUT_MSG消息时触发。广播队列分为foreground队列和background队列两个。其中前台广播的超时为10s;后台广播的超时为60s。广播的使用需要注册广播和发送广播两步:

2023-01-30 18:03:43 766

原创 Android ANR触发机制及日志分析

1.ANRApplication Not Responding,即应用程序未响应。Android系统要求一些事件在一定时间范围内完成,如果超过预定时间未得到有效响应或响应时间过长,就会造成ANR。Android中有4种ANR发生场景:①点击事件(按键和触摸事件):点击事件在5s内未被处理就会产生ANR,日志描述为Input event dispatching timed out。②服务Service: 前台Service20s内、后台Service 200s内未完成启动就会产生ANR,日志描

2023-01-28 20:02:39 2753

原创 Android theme

1.主题themetheme是应用的主题,或者说风格。通过设置主题可以改变应用的相关皮肤。一般主题作用于整个应用,即对应的是application,但有时候部分界面需要特殊的处理,比如为一个特定的activity设置一个单独的皮肤。<application android:icon="@mipmap/ic_launcher" android:label="@string/app_name" …… android:theme="@style/AppTh

2022-12-12 20:14:56 1192

原创 Android assets

1.应用程序资源管理器assetsassets就是apk工程中的一个普通目录,在每个工程的根目录下都可以发现(或者可以自己创建)一个assets目录。assets目录用于专门保存各种外部文件,比如图像、音视频、配置文件、字体、自带数据库等。它之所以适合用来管理这些文件,是因为应用程序在编译时不会去处理这个目录下的文件,但是却会将它们打包进APK中。而其它你随便创建的目录在编译时就会被直接忽略掉。同时,可以在assets目录内任意创建目录层级关系,这对于有大量外部文件需要集成的应用来说,就能很方便地分

2022-11-23 18:17:30 8748

原创 Android设计模式-享元模式

1.享元模式Flyweight享元模式使用共享对象可有效地支持大量的细粒度的对象。享元模式属于结构型模式。享元模式常用于系统底层开发,解决系统的性能问题。多用于存在大量重复对象的场景,或需要缓冲池的时候。享元模式是对象池技术的重要实现方式,池里都是创建好的对象,无需再创建可直接拿来使用,这样减少了重复对象的创建,从而降低内存、提升性能。Flyweight:抽象的享元角色,是产品的抽象类,同时定义出对象的外部状态和内部状态的接口或实现。ConcreteFlyweight:具体的享元角

2022-11-10 15:27:05 856

原创 Android Dialog相关设置

1.AlertDialog宽高设置,设置最大高度AlertDialog可以setView自定义视图,也可以直接使用setMultiChoiceItems多选与setSingleChoiceItems单选,因此使用起来较灵活,使用频率也较高。但是AlertDialog高度会根随其所包含的内容发生变化,若包含的内容较多,其高度很可能充斥整个屏幕,视觉上很难看,因此可以设定最大的高度,使其显示更加美观、自然。1)若知道具体内容的大小:window window = dialog.getWindow

2022-11-02 17:02:10 4449

原创 Android Lottie动画

1.Lottie动画Lottie是Airbnb开源的动画框架,是基于CALayer的动画,所有的路径预先在AE中计算好,转换为Json文件, 然后自动转换为Layer的动画。Lottie有各种不同的版本, 安卓、iOS、前端都可以使用, 理论上动画做一套就可以共用, 大大的减少了工作量。如果实现复杂的动画,可以直接让设计出相关的动画json文件,大大减轻了代码的工作量。现在有了 Lottie,只需要简单的代码就可以实现复杂动画效果的库。很好的解决了动态改变动画的能力,只需要动态加载相应的json文件

2022-11-02 16:20:12 1104

原创 Android ThreadLocal

1.ThreadLocalThreadLocal是一个线程内部的数据存储类,通过它可以在指定的线程中存储数据,数据存储以后,只有在指定的线程中才可以访问,其他线程无法获取。使用场景:①当某些数据是以线程为作用域且不同线程之间具有不同数据副本的时候,就可以考虑使用ThreadLocal。Android的Handler消息机制中,Looper的作用域就是线程且不同线程之间具有不同的Looper,这里使用的就是ThreadLocal对Looper与线程进行关联,如果不使用ThreadLoca

2022-10-31 15:27:15 1642

原创 Android Tint着色器

1.tintTint着色器可以使图片变色,使用tint可以显示不同颜色的图片。Tint着色器效果是将非透明的像素点渲染成指定的颜色。比如给定一个白色图标图片,如果要显示不同的颜色,可以直接在ImageView中设置android:tint或app:tint属性,设置一个颜色值即可将该图片显示为指定颜色的图片。这样同一张图片可以显示多种不同颜色的效果,从而减少APK打包的图片数量,也就减少了APK安装包的大小。2.基本用法Tint基本用法就是在ImageView组件中添加app:tint

2022-10-22 10:48:52 2924

原创 Android Handler之同步屏障机制

1.Message消息分类Handler的Message分为3种:普通消息、屏障消息、异步消息。其中普通消息又称为同步消息,屏障消息又称为同步屏障。通常使用的都是普通消息,而屏障消息就是在消息队列中插入一个屏障,在屏障之后的所有普通消息都会被挡着,不能被处理。不过异步消息却例外,屏障不会挡住异步消息。因此可以这样认为:屏障消息就是为了确保异步消息的优先级,设置了屏障后,只能处理其后的异步消息,同步消息会被挡住,除非撤销屏障。2.发送异步消息通常使用Handler发消息时都是同步消息

2022-09-17 10:28:31 1553

原创 Android ConstraintLayout

1.ConstraintLayoutConstraintLayout指约束布局,目的是为了解决复杂的页面层级嵌套过多的问题。使用该布局,需要引入依赖implementation ‘androidx.constraintlayout:constraintlayout:2.1.2’2.属性用法①位置约束layout_constraintXXX_toYYYOfConstraintLayout的位置约束属性如下,属性值可以是parent或者@+id/兄弟组件的id:layout_const.

2022-08-25 18:26:19 3141

原创 Android 设计模式--状态模式

1.状态模式状态模式State Pattern,是十一大行为型设计模式之一。状态模式指的是当一个对象的内在状态改变时,其行为也随之改变。即状态模式中的行为是由状态来决定的,不同的状态下有不同的行为。用一句话来表述,状态模式把对象的行为包装在不同的状态对象里,每一个状态对象都有一个共同的抽象状态基类。状态模式的意图是让一个对象在其内部状态改变的时候,其行为也随之改变。状态模式和策略模式的机构几乎完全一样,但它们的目的、本质却完全不一样。状态模式的行为是平行的,不可替换的,但策略模式的行为是彼此

2022-08-24 18:14:33 1154

原创 Android Retrofit★

1.RetrofitRetrofit是基于okhttp封装的网络请求框架,网络请求的工作本质上是OkHttp完成,而Retrofit仅负责网络请求接口的封装。OkHttp是安卓官方认证的网络请求框架,非常强大,但是它也有不少缺点:①OkHttp配置网络请求是非常繁琐的,尤其是配置复杂网络请求body、请求头、参数的时候。②数据解析过程需要用户手动拿到ResponseBody进行解析,难以复用。③无法自动进行线程切换。④如果存在嵌套网络请求,就会陷入“回调地狱”。为了解决这些缺点,让网

2022-08-22 12:08:20 806

原创 Android 插件化

1.插件化插件可以理解为免安装的Apk,而支持插件的app称为宿主。在Android系统中,应用是以Apk的形式存在的,应用都需要安装才能使用。实际上Android系统安装应用的方式相当简单,就是把应用Apk拷贝到系统不同的目录下,然后把so解压出来而已。常见的应用安装目录有:/system/app:系统应用/system/priv-app:系统应用/data/app:用户应用一个Apk会包含如下几个部分:classes.dex:Java代码字节码res:资源文件.

2022-08-12 17:38:58 3306

原创 Android Camera2

1.Camera2Android API 21新增了Camera2,与之前的Camera架构完全不同,使用起来也比较复杂,但是功能变得很强大。Camera2中几个比较重要的类:①CameraManager: 管理手机上的所有摄像头设备。它其实是一个系统服务,通过getSystemService(Context.CAMERA_SERVICE)获取,它的作用主要是获取摄像头列表和打开指定的摄像头。通过CameraManager对象可以得到一些相机的基本信息,这个信息就存储在CameraChara

2022-08-11 20:35:21 4122

自定义登陆动画界面

自定义登陆动画界面

2017-04-28

textview文字竖直显示

textview 文字垂直显示

2014-07-04

viewpager 小圆点

viewpager 小圆点

2014-07-03

viewpager滑动换屏

viewpager 滑动换屏 下面带小圆点 可以循环滑动

2014-07-03

保存当前经纬度到数据库

获取当前位置经纬度 并保存到数据库 可以对数据库进行可以增删改查操作

2014-06-27

获取当前经纬度并保存

获取当前位置的经纬度 保存到本地文件(有sd卡就保存到sd卡,没有就保存到手机内存) 从本地文件读出所有保存的内容

2014-06-25

android动态壁纸

动态壁纸

2014-06-18

动态壁纸下雨

动态壁纸 下雨 图片随手指运动

2014-06-18

下拉刷新上拉更多

listview 下拉刷新 上拉更多

2014-06-13

listview上拉刷新

listview上拉刷新

2014-06-06

listview下拉刷新

listview 下拉刷新

2014-06-06

正在加载,请稍后

登陆时,转圈, 正在加载,请稍后

2014-06-06

翻书效果 翻书

翻书效果 翻书

2014-05-22

断点继续下载

下载文件,中间过程中可以暂停,然后按“继续”按钮,则文件在断点处继续下载。

2014-05-22

slidemenu侧滑菜单

slidemenu 侧滑菜单 手指右滑,左侧出现半栏的设置选项

2014-05-22

制作头像类

从图库选择图片或者用照相机拍照后,按1:1裁剪后作为头像

2014-05-22

啊啊啊啊啊

啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊

2014-05-22

游戏背景音乐

MediaPlayer+SoundPool.rar 游戏背景音乐

2014-05-22

照片瀑布流

瀑布流效果

2014-05-22

底部tabhost

底部tabhost

2014-05-22

android测试

android测试 android测试 android测试 android测试 android测试

2018-04-16

图片轮显自动滑动

图片轮显自动滑动;图片轮显自动滑动;图片轮显自动滑动;图片轮显自动滑动

2018-04-12

viewpager使用代码

用于viewpage的基本使用方法;用于viewpage的基本使用方法;用于viewpage的基本使用方法;用于viewpage的基本使用方法

2018-04-12

UIView动画

UIView 动画 UIView动画

2017-04-28

登陆动画界面

登陆动画界面 登陆动画界面

2017-04-28

IOS 基本动画(旋转、移动、闪烁、缩放等)

IOS 基本动画(旋转、移动、闪烁、缩放等)

2017-04-27

动态加载apk(插件)

动态加载apk(插件)

2016-04-08

火车票查询

火车票查询,使用方便简单,容易上手,可以帮助需要买火车票的朋友们!

2016-01-27

CoordinatorLayout

CoordinatorLayoutDEMO Toolbar跟随滚动折叠效果

2016-01-27

七牛上传图片

利用七牛云存储来储存图片,代替了数据库存储

2015-04-10

备忘闹钟软件

备忘闹钟是一款专为安卓手机用户量身定制的闹钟软件,全面超越了安卓手机系统自带闹钟。提供大家常用的起床闹钟、会议提醒、语音备忘、倒计时等多种功能。 主要功能说明: 1.超越系统功能:强大的响铃时间设定、铃声音量、延迟响铃时间设定、震动闹钟等; 2.个性闹钟定制:起床、生日、备忘等多种自定义闹钟提供完美解决个人生活提醒解决方案; 3.智能语音闹钟:随心添加语音闹铃,个性更好用;

2015-02-26

android 嵌入广告基础学习

适合刚接触android学习的初学者,在android应用中嵌入广告,欢迎朋友们下载。

2015-01-28

android 自定义组合控件

android 自定义组合控件的方法。详见:http://blog.csdn.net/zenmela2011/article/details/42461229

2015-01-06

android 重写控件添加自定义属性

android 重写控件添加自定义属性,具体可见http://blog.csdn.net/zenmela2011/article/details/42459481

2015-01-06

3D变换的特效

3D变换的特效-----Rotate3dAnimation 可以参考http://blog.163.com/benben_long/blog/static/19945824320141117443156/

2014-12-17

android客户端+服务端

android 客户端+服务端 客户端接收服务端发来的消息

2014-11-20

volley jar包

网络编程 volley jar包

2014-11-03

滑动开关(可点击选择“是”和“否”)

滑动开关,滑动到“是”时,“是”的背景为绿色,文字为白色,“否”的背景为浅灰色,文字为深灰色, 或者 滑动到“否” 背景改变 文字颜色改变

2014-07-16

底部tab 自适应各种屏幕

底部tab,并且自适应各种屏幕 底部tab,并且自适应各种屏幕 底部tab,并且自适应各种屏幕 底部tab,并且自适应各种屏幕

2014-07-07

TextView 垂直自动滚动

TextView 垂直自动滚动

2014-07-04

空空如也

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

TA关注的人

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