Android
文章平均质量分 71
qq_28273051
这个作者很懒,什么都没留下…
展开
-
android 打开系统程序 显示系统图片与视频(用于备忘)
转载请标明出处。打开相册和视频跳转到图片与视频显示intent = new Intent(Intent.ACTION_VIEW);//图片和视频intent.setData(MediaStore.Images.Media.EXTERNAL_CONTENT_URI);//等价于intent.setData(Uri.parse("content://media/external/images/media"));//由log输出可以看到: MediaStore.Images.Media.EXTE原创 2021-06-01 15:18:39 · 14491 阅读 · 1 评论 -
Android 闯关
欢迎来到闯关模式,只要真正掌握了我列出的所有关卡,那么你就相当于高级水平了。基本上相当于阿里p6级别,一般的小公司leader的水平(技术上)。除了了解具体知识和内容外,我还会在每关布置作业题,大家可以写代码实践或者写文章输出,加深纸上觉来终觉浅,绝知此事要躬行的印象。这样才能转化成你的知识。完成后,可以在星球打卡,标签闯关打卡 -------------第1关:动画(建议学习时间:3天) 关键知...原创 2019-11-11 17:23:13 · 332 阅读 · 0 评论 -
Surfaceview的绘制与应用
1.surfaceview与view的区别Android 提供了view进行视图的绘制,可以满足大部分的会图需求,但在有些时候却是心有余而力不足。我们知道,view通过刷新来绘制视图。Android系统通过vsync信号来进行屏幕的绘制。刷新的时间间隔为16毫秒。如果在16毫秒内完成了索要刷新的绘制操作,那么在视觉效果上就不会产生卡顿的感觉。如果逻辑操作过多,频繁刷新就会造成界面的卡顿。原创 2017-07-13 16:12:04 · 291 阅读 · 0 评论 -
requestLayout、invalidate与postInvalidate的区别与使用场景分析
这篇文章将详细讲述与view自定义三大工作流程密切相关的两个方法,分别是requestLayout和invalidate,如果对Viwe的三个工作流程不熟悉的读者,可以先看看view的绘制流程。http://blog.csdn.net/qq_28273051/article/details/53992917http://blog.csdn.net/qq_28273051/article原创 2017-07-13 10:01:36 · 430355 阅读 · 1 评论 -
android中invalidate()的自动清屏含义以及屏幕刷新
invalidate()是用来刷新View的,必须是在UI线程中进行工作。比如在修改某个view的显示时,调用invalidate()才能看到重新绘制的界面。invalidate()的调用是把之前的旧的view从主UI线程队列中pop掉。 对于屏幕刷新有以下集中情况可以考虑: 1.不使用多线程和双缓冲 这种情况最简单了,一般只是希望在View发生改变时对UI进行重原创 2017-07-13 09:42:16 · 1105 阅读 · 0 评论 -
Scrollview 嵌套listView 与recycleView 滑动冲突的解决
本来我们用recycview代替了listview之后就很少会遇到scrollview了但是产品需求总是在不断的更新。在时间与技术的探索之下,还是会有一部分兄弟会选择这样的布局,下面我就来说说使用之后遇到的一些坑的解决方案。1 scrollview 签到listview 的解决方案(1)只需在MainActivity中 找到listview 和 scrollview原创 2017-06-30 14:55:59 · 1138 阅读 · 0 评论 -
Android 单位转换工具
/** * Created by Administrator on 2017/7/10. */public class DisplayUtil { /** * 将px装换成dp,保证尺寸不变 * * @param context * @param pxValue * @return */ public stati原创 2017-07-10 15:53:15 · 297 阅读 · 0 评论 -
Android 实现滑动的七种方法
1.1 用Layout方法 我们知道,当view在绘制时会调用onlayout方法来设置显示位置。同样也可以通过view的left、top, right,buttom 四个属性来控制view的坐标。每次在ontouchevent的时候,我们都要获取一下触摸点的坐标。 @Override public boolean onTouchEvent(MotionEvent event原创 2017-07-10 15:31:17 · 513 阅读 · 0 评论 -
fragment 与viewpager预加载的解决 懒加载
在项目中ViewPager和Fragment接口框架已经是处处可见,但是在使用中,我们肯定不希望用户在当前页面时就在前后页面的数据,加入数据量很大,而用户又不愿意左右滑动浏览,那么这时候ViewPager中本来充满善意的预加载就有点令人不爽了。我们能做的就是屏蔽掉ViewPager的预加载机制。虽然ViewPager中提供的有setOffscreenPageLimit()来控制其预加载的数原创 2017-06-29 13:59:22 · 423 阅读 · 0 评论 -
android 消息机制
Android的消息机制是指handler的运行机制,handler的运行需要底层的messagequeue和loop的支撑。messagequeue的中文翻译是消息队列的意思,顾名思义,它的内存储存了一组信息,以队列的形式,对外提供插入和删除操作。虽然叫消息队列,但是他内部是用单链表的形式来对消息进行储存的。 looper这里可以理解为消息循环。因为messageq原创 2017-06-29 13:45:55 · 234 阅读 · 0 评论 -
在第三方浏览器中打开本地app某个activity 使得app多次启动的解决办法
浏览器打开app启动多次的解决办法原创 2017-05-17 10:53:35 · 1111 阅读 · 0 评论 -
url打开app
浏览器打开本地app的实现原创 2017-05-16 19:49:14 · 704 阅读 · 0 评论 -
Acach缓存的实现
主要是减少网络请求的次数原创 2017-05-16 19:40:57 · 359 阅读 · 0 评论 -
android wifi 网络检测
显示WiFi的监听方式原创 2017-05-16 19:29:16 · 616 阅读 · 0 评论 -
Android性能优化的方法
Android作为一种移动设备,它的内存和cup都有了一定的限制。无法做到像pc那样,超大内存和高性能的cpu。这也意味着Android程序不能无限制的使用内存和cpu。过多的使用内存会导致oom,俗称内存溢出。过多的使用cpu资源,则会导致程序变得很卡,甚至出现anr。因此对程序员的要求也就更高了。下面我对Android的优化做一个介绍:1/ 布局优化布局优化的思想很简单原创 2017-06-26 17:31:19 · 362 阅读 · 0 评论 -
Android 不依赖activity的全局悬浮窗实现
Android悬浮窗实现 实现基础Android悬浮窗实现使用WindowManager ,WindowManager介绍 通过Context.getSystemService(Context.WINDOW_SERVICE)可以获得 WindowManager对象。每一个WindowManager对象都和一个特定的 Display绑定。想要获取一个不同的display原创 2017-07-20 10:01:15 · 22911 阅读 · 1 评论 -
androoid 渐变背景动画实现
在安卓里面,动画的背景色渐变(比如又红色变为蓝色)是依靠属性动画来完成的,属性动画大部分情况下是来实现View的运动动画的,因为View的背景也是View的属性之一,所以属性动画自然也就可以让view的背景产生渐变的效果,代码如下: View v = ...;//实例化一个Viewprivate static final int RED = 0xffFF8080;private st...原创 2018-10-14 07:16:56 · 296 阅读 · 0 评论 -
Android高级进阶书籍推荐
中级进阶推荐看一下以下这几本书:《Android从入门到精通(附光盘)》 明日科技 编《第一行代码2 Android(第二版)》 郭霖 著《Android开发进阶 从小工到专家 》何红辉 著《Android进阶之光 》刘望舒 著《Android开发艺术探索》 任玉刚 著《Android群英传》 徐宜生 著《疯狂Android讲义 》李刚 著Android高级进阶设计模式有关...原创 2018-08-31 13:55:26 · 3392 阅读 · 1 评论 -
hashmap排序问题
用的最多的HashMap,不保证映射的顺序,特别是它不保证该顺序恒久不变。LinkedHashMap,维持元素的插入顺序。TreeMap中有一个传入比较器的构造函数, Map中的元素可按此比较器进行排序。 以上3个知识点,前2个作为复习,最后一个才是本次使用的重点。要想改变TreeMap的默认比较次序,我们可以在其构造函数中传入一个自己的比较器。TreeMap的比较器构造函数如下: publi...原创 2018-03-14 16:50:35 · 823 阅读 · 1 评论 -
Android图片压缩方法
android中图片是以bitmap形式存在的,那么bitmap所占内存,直接影响到了应用所占内存大小,首先要知道bitmap所占内存大小计算方式:图片长度 x 图片宽度 x 一个像素点占用的字节数以下是图片的压缩格式:其中,A代表透明度;R代表红色;G代表绿色;B代表蓝色。ALPHA_8 表示8位Alpha位图,即A=8,一个像素点占用1个字节,它没有颜色,只有透明度 ARGB_4444 表示1...原创 2018-03-22 16:29:05 · 282 阅读 · 0 评论 -
Eventbus接不到消息的处理办法
最近积累了好多问题和学习记录知识,但是最近公司项目实在太忙,抽不开身,后面有时间尽量都补上,今天先记录一个遇到的小问题:eventbus无法接收到消息我仔细查看了消息体和订阅方法,都没找到问题,那么应该是我订阅注册过程的问题了,经过log日志打印终于找到了问题所在:eventbus普通的订阅事件,即eventbus.getDefault().post(xxx)方法必须是在订阅后发送消息才可接收到...原创 2018-03-04 22:24:50 · 3286 阅读 · 1 评论 -
App性能优化小建议
导语安卓大军浩浩荡荡,发展已近十个年头,技术优化日异月新,如今Android 8.0 Oreo 都发布了,Android系统性能已经非常流畅了。但是,到了各大厂商手里,改源码自定系统,使得Android原生系统变得鱼龙混杂,然后到了不同层次的开发工程师手里,因为技术水平的参差不齐,即使很多手机在跑分软件性能非常高,打开应用依然存在卡顿现象。另外,随着产品内容迭代,功能越来越复杂,UI页面也越来越丰...原创 2018-03-16 11:50:28 · 1691 阅读 · 0 评论 -
HashMap的工作原理
HashMap的工作原理是近年来常见的Java面试题。几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道Hashtable和HashMap之间的区别,那么为何这道面试题如此特殊呢?是因为这道题考察的深度很深。这题经常出现在高级或中高级面试中。投资银行更喜欢问这个问题,甚至会要求你实现HashMap来考察你的编程能力。ConcurrentHashMap和其它同步集合的引入原创 2017-12-07 16:35:56 · 162 阅读 · 0 评论 -
Android7.0 7.1 popupwindow showAsDropDown 显示异常解决办法
Android7.0 popupwindow showAsDropDown在屏幕上方弹出解决方法,通过版本控制解决,这属于Android7.0代码的bug新增:7.1版本问题修复。public static void showAsDropDown(PopupWindow pw, View anchor, int xoff, int yoff) { if (Build原创 2017-09-12 17:34:52 · 903 阅读 · 1 评论 -
WebView加载网页不显示图片解决办法
于大家来讲WebView肯定很熟悉,因为我们在日常开发中经常用到它。所以对于它的一些基本用法我就不在这啰嗦了,直接进入正题。我遇到的问题就是在使用WebView加载网页的时候图片不显示(我手机系统是5.1.1),当时出现这个问题我就想当然的以为,是不是给WebView少设置的什么东西。然后百度一下: mWebview.getSettings().setJavaSc原创 2017-09-12 11:13:44 · 4885 阅读 · 0 评论 -
java中的WeakReference
java语言中为对象的引用分为了四个级别,分别为 强引用 、软引用、弱引用、虚引用。本文只针对java中的弱引用进行一些分析,如有出入还请多指正。在分析弱引用之前,先阐述一个概念:什么是对象可到达和对象不可到达状态。其实很简单,我举个例子:现在有如下两个类class A class B,在JVM上生成他们两个类的实例分别为 instance a instance b有如下表达原创 2017-09-14 11:56:37 · 254 阅读 · 0 评论 -
android 7.0 适配
项目运行两个礼拜了,相机也在7.0以下运行的完美,突然早上同事拿他的7.0手机给我说 这是一个大bug.我一看调用相机直接崩溃。报的错误如下图:接着我以为是我的文件路径错误,找了老半天没发现问题,仔细想想不太可能了。于是乎,开始求助各大网友了。解决方案:1、(推荐)7.0之后你的app就算有权限,给出一个URI之后手机也认为你没有权限。不用修改原有代码,在Applicati原创 2017-08-28 16:24:42 · 747 阅读 · 0 评论 -
Android GridView设置item的高度与宽度相等、GridView条目宽高相同
自定义View,继承RelativeLayout或者LinearLayout,重写onMeasure()方法,代码如下:public class SquareLayout extends RelativeLayout { public SquareLayout(Context context, AttributeSet attrs, int defStyle) { s原创 2017-08-28 16:14:52 · 2272 阅读 · 0 评论 -
glide加载圆角图片
圆角图片的加载原创 2017-05-16 19:19:08 · 753 阅读 · 0 评论 -
scrollowview 嵌套gridview回到顶部最完美解决
首先在scrolloview中添加如下代码<ScrollView android:id="@+id/scroll_person_fragment" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/bg_gra原创 2017-05-23 20:08:27 · 584 阅读 · 0 评论 -
自定义view的denmo
我们在自定义控件的过程中,必须要考虑wrap_content和padding,为了提供便捷性,还需要对外提供自定义属性:首先我们来添加自定义属性,在资源问价values中创建attrs.xml: 看看它的布局文件,在这里如果需要添加自定义的属性,那么我们就需要在跟布局加入这句话xmlns:app="http://schemas.android.c原创 2017-01-05 14:21:37 · 288 阅读 · 0 评论 -
自定义view分类和注意事项
自定义view一直是我们开发中的难题,也是创新点,在很多初学者都对它感到很头疼,我也是如此,这里写出来与大家分享,希望我们都能成功解决这块蛋糕。一、自定义view的分类: 1、继承view重写ondraw方法 这种方式在于实现一些不规则的效果,即这种效果不方便通过布局的组合方式来表达,往往需要静态或者动态现实一些不规则图形,caiyongzhe种方式必须要自己重写原创 2017-01-05 14:17:17 · 681 阅读 · 0 评论 -
view绘制流程之layout和draw
layout的作用是viewgroup用来确定子元素的位置,当viewgroup的位置确定后,他在layout中会遍历所有子元素并调用其layout方法,在layout方法中onlayout方法又会被调用,layout过程和measure过程相比就简单多了,layout方法确定view本身的位置,先看view的layout方法: @SuppressWarnings({"unchecked"}原创 2017-01-04 17:13:55 · 297 阅读 · 0 评论 -
activity启动时获取view的高度和宽度
我们在开发过程中经常会遇到在activity启动时就需要获取view的高度和宽度,我们发现在oncreate、onresume,onstart这几个方法中都无法正确的获取view的高度和宽度。很多时候获取到的值都是0 。这让我头疼了很久,查看资料,以及源码分析,终于找到了解决的办法,在下边和小伙伴们分享,分享。 (1)activity/view#onwindowfocuschange原创 2017-01-04 15:47:43 · 750 阅读 · 0 评论 -
view工作流程解析之measure测量
view的流程主要指measure,layout和draw三个流程。即测量、布局和绘制三个主要流程。measure是测量view的宽高,layout是确定view的四个顶点,draw是把view绘制到界面上。measure过程measure过程要分情况来看,如果只是一个原始的view,那么通过measure就完成了其测量过程,如果是viewgroup,那么除了自身的测量之外还会去遍历所有子原创 2017-01-04 11:25:06 · 504 阅读 · 0 评论 -
view的滑动讲解
在Android应用中,view的滑动几乎是标配;比如上拉加载,下拉刷新,slidingmenu它们都需要滑动,从另一个方面来说,因为手机屏幕较小,想要显示更多的内容,就需要使用滑动来隐藏或者展示一些内容,基于上边两点我们可以知道滑动在Android开发中具有很重要的作用。掌握滑动的方法是实现绚丽自定义控件的基础。常见的滑动就这么三种,下面我们来一一分析。1.使用scrollTo和scroll原创 2016-12-23 11:48:32 · 275 阅读 · 0 评论 -
Android开发-基本概念小整理(一)为了面试的小伙伴们所准备~~
1.请解释下在单线程模型中Message,Handler,Message Queue,Looper之间的关系。简单的说,Handler获取当前线程中的looper对象,looper用来从存放Message的MessageQueue中取出Message,再有Handler进行Message的分发和处理。Message Queue(消息队列):用来存放通过Handler发布的消息,通常附属于某转载 2016-12-30 16:45:49 · 265 阅读 · 0 评论 -
自定义view之view的工作流程
自定义view是我们开发中经常遇到的问题,总结下来之后发现,对于自定义view来说,了解他的工作流程对我们自定义控件的时候有很大的帮助。1、我们先来看看viewroot和decorviewviewroot对应于viewrootimpl类,它是链接windowmanager和decorview的纽带,view的三大流程均是通过viewroot来完成的。view的绘制流程就是从viewroot原创 2017-01-03 11:33:48 · 408 阅读 · 0 评论 -
Android 中view的解释
view是所有控件的父类,他的位置主要由他的四个顶点来决定。分别对应view的四个基本属性:left,top,right,bottom。其中top是左上角纵坐标,left是左上角的横坐标,right右下角的横坐标,bottom右下角的纵坐标。这些坐标都是相对于view的父控件来说的,因此它是一种相对坐标。在Android系统中,x轴和y轴的方向分别是向右和向下的 。原创 2016-12-22 17:00:00 · 1020 阅读 · 0 评论 -
evevtbus
什么是EventBusEventBus是Android下高效的发布/订阅事件总线机制。作用是可以代替传统的Intent,Handler,Broadcast或接口函数在Fragment,Activity,Service,线程之间传递数据,执行方法。特点是代码简洁,是一种发布订阅设计模式(Publish/Subsribe),或称作观察者设计模式。下载EventBus1.原创 2016-12-08 12:04:39 · 319 阅读 · 0 评论