Android开发中,那些让你相见恨晚的方法、类或接口 转载 作者:TheFresher 出处:http://liukun.engineer

本文汇总了多种Android开发实用技巧,包括视图操作、动画处理、线程管理、资源提取及性能优化等方面的内容。
  • getParent().requestDisallowInterceptTouchEvent(true);剥夺父view 对touch 事件的处理权,谁用谁知道。

  • ArgbEvaluator.evaluate(float fraction, Object startValue, Object endValue); 用于根据一个起始颜色值和一个结束颜色值以及一个偏移量生成一个新的颜色,分分钟实现类似于微信底部栏滑动颜色渐变。

  • Canvas中clipRect、clipPath和clipRegion 剪切区域的API。

  • Bitmap.extractAlpha ();返回一个新的Bitmap,capture原始图片的alpha 值。有的时候我们需要动态的修改一个元素的背景图片又不希望使用多张图片的时候,通过这个方法,结合Canvas 和Paint 可以动态的修改一个纯色Bitmap的颜色。

  • HandlerThread,代替不停new Thread 开子线程的重复体力写法。

  • IntentService,一个可以干完活后自己去死且不需要我们去管理子线程的Service。

  • Palette,5.0加入的可以提取一个Bitmap 中突出颜色的类,结合上面的Bitmap.extractAlpha,你懂的。

  • Executors. newSingleThreadExecutor();这个是java 的,之前不知道它,自己花很大功夫去研究了单线程顺序执行的任务队列。。

  • android:animateLayoutChanges=”true”,LinearLayout中添加View 的动画的办法,支持通过setLayoutTransition()自定义动画。

  • ViewDragHelper,自定义一个子View可拖拽的ViewGroup 时,处理各种事件很累吧,嗯? what the fuck!!

  • GradientDrawable,之前接手公司的项目,发现有个阴影效果还不错,以为是切的图片,一看代码,什么鬼= =!

  • AsyncQueryHandler,如果做系统工具类的开发,比如联系人短信辅助工具等,肯定免不了和ContentProvider打交道,如果数据量不是很大的情况下,随便搞,如果数据量大的情况下,了解下这个类是很有必要的,需要注意的是,这玩意儿吃异常..

  • ViewFlipper,实现多个view的切换(循环),可自定义动画效果,且可针对单个切换指定动画。

  • 有朋友提到了在自定义View时有些方法在开启硬件加速的时候没有效果的问题,在API16之后确实有很多方法不支持硬件加速,通常我们关闭硬件加速都是在清单文件中通过,其实android也提供了针对特定View关闭硬件加速的方法,调用View.setLayerType(View.LAYER_TYPE_SOFTWARE, null);即可。

  • android util包中的Pair类,可以方便的用来存储一”组”数据。注意不是key value。

  • PointF,graphics包中的一个类,我们经常见到在处理Touch事件的时候分别定义一个downX,一个downY用来存储一个坐标,如果坐标少还好,如果要记录的坐标过多那代码就不好看了。用PointF(float x, float y);来描述一个坐标点会清楚很多。

  • StateListDrawable,定义Selector通常的办法都是xml文件,但是有的时候我们的图片资源可能是从服务器动态获取的,比如很多app所谓的皮肤,这种时候就只能通StateListDrawable
    来完成了,各种addState即可。

  • android:descendantFocusability,ListView的item中CheckBox等元素抢焦点导致item点击事件无法响应时,除了给对应的元素设置 focusable,更简单的是在item根布局加上android:descendantFocusability=”blocksDescendants”

  • android:duplicateParentState=”true”,让子View跟随其Parent的状态,如pressed等。常见的使用场景是某些时候一个按钮很小,我们想要扩大其点击区域的时候通常会再给其包裹一层布局,将点击事件写到Parent上,这时候如果希望被包裹按钮的点击效果对应的Selector继续生效的话,这时候duplicateParentState就派上用场了。

  • includeFontPadding=”false”,TextView默认上下是有一定的padding的,有时候我们可能不需要上下这部分留白,加上它即可。

  • Messenger,面试的时候通常都会被问到进程间通信,一般情况下大家都是开始背书,AIDL巴拉巴拉。。有一天在鸿神的博客看到这个,嗯,如他所说,又可以装一下了。

  • TextView.setError();用于验证用户输入。

  • ViewConfiguration.getScaledTouchSlop();触发移动事件的最小距离,自定义View处理touch事件的时候,有的时候需要判断用户是否真的存在movie,系统提供了这样的方法。

  • ValueAnimator.reverse(); 顺畅的取消动画效果。

  • ViewStub,有的时候一块区域需要根据情况显示不同的布局,通常我们都会通过setVisibility的方法来显示和隐藏不同的布局,但是这样默认是全部加载的,用ViewStub可以更好的提升性能。

  • onTrimMemory,在Activity中重写此方法,会在内存紧张的时候回调(支持多个级别),便于我们主动的进行资源释放,避免OOM。

  • EditTxt.setImeOptions, 使用EditText弹出软键盘时,修改回车键的显示内容(一直很讨厌用回车键来交互,所以之前一直不知道这玩意儿)

  • TextView.setCompoundDrawablePadding,代码设置TextView的drawable padding。

  • ImageSwitcher,可以用来做图片切换的一个类,类似于幻灯片。

  • WeakHashMap,直接使用HashMap有时候会带来内存溢出的风险,使用WaekHashMap实例化Map。当使用者不再有对象引用的时候,WeakHashMap将自动被移除对应Key值的对象。


还是出现这个问题 zhihonghe@ubuntu:~/Desktop/docker-ub-18$ sudo docker build -t ubuntu_openwrt_18 -f Dockerfile . Sending build context to Docker daemon 8.704kB Step 1/23 : FROM ubuntu:18.04 ---> f9a80a55f492 Step 2/23 : LABEL Authors="Kun Liu <liukun@tp-link.com.hk> " ---> Using cache ---> 0c24f88a2436 Step 3/23 : LABEL Description="Broadcom SDK Build based on 18.04 LTS" Version="1.0" ---> Using cache ---> 6e934d1e19e4 Step 4/23 : ENV STAGINGDIR="" ---> Using cache ---> b30883665d79 Step 5/23 : ENV CONFIGDIR="" ---> Using cache ---> 60ee218d114e Step 6/23 : ENV PACKAGEDIR="" ---> Using cache ---> 13d94fd9880e Step 7/23 : RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections ---> Using cache ---> 597ec0c7bcd1 Step 8/23 : RUN apt-get clean && apt-get update && apt-get install --yes --no-install-recommends --no-install-suggests build-essential net-tools inetutils-ping libncurses5-dev libdigest-crc-perl libpopt-dev xxd liblzo2-dev zlib1g-dev lib32z1 libssl-dev libglib2.0-dev libreadline-dev libjson-c-dev libxml2-dev libsqlite3-dev sqlite3 libuv1-dev libxslt1-dev libfcgi-dev libevent-dev libyajl-dev liburiparser-dev libwebsockets-dev locales lua5.1 liblua5.1-dev python python3 python3-dev python3-pip git git-lfs subversion autoconf automake pkg-config ccache cmake ninja-build clang-tools-6.0 bison flex gettext ca-certificates libtool patch vim unzip uuid-dev wget curl cpio bc gawk gdb valgrind diffstat chrpath texinfo ssh openssh-client openssh-server netbase quilt protobuf-c-compiler dropbear-bin openvswitch-switch tmux dirmngr lighttpd alien mlocate iproute2 dos2unix lsb-release rsync gdisk man pax moreutils npm sudo ---> Running in 055b66ac3c61 Get:1 http://archive.ubuntu.com/ubuntu bionic InRelease [242 kB] Get:2 http://security.ubuntu.com/ubuntu bionic-security InRelease [102 kB] Get:3 http://security.ubuntu.com/ubuntu bionic-security/universe amd64 Packages [1637 kB] Get:4 http://archive.ubuntu.com/ubuntu bionic-updates InRelease [102 kB] Get:5 http://archive.ubuntu.com/ubuntu bionic-backports InRelease [102 kB] Get:6 http://archive.ubuntu.com/ubuntu bionic/multiverse amd64 Packages [186 kB] Get:7 http://archive.ubuntu.com/ubuntu bionic/main amd64 Packages [1344 kB] Get:8 http://security.ubuntu.com/ubuntu bionic-security/restricted amd64 Packages [1688 kB] Get:9 http://security.ubuntu.com/ubuntu bionic-security/main amd64 Packages [3373 kB] Get:10 http://archive.ubuntu.com/ubuntu bionic/universe amd64 Packages [11.3 MB] Get:11 http://security.ubuntu.com/ubuntu bionic-security/multiverse amd64 Packages [23.8 kB] Get:12 http://archive.ubuntu.com/ubuntu bionic/restricted amd64 Packages [13.5 kB] Get:13 http://archive.ubuntu.com/ubuntu bionic-updates/universe amd64 Packages [2411 kB] Get:14 http://archive.ubuntu.com/ubuntu bionic-updates/multiverse amd64 Packages [30.8 kB] Get:15 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 Packages [3786 kB] Get:16 http://archive.ubuntu.com/ubuntu bionic-updates/restricted amd64 Packages [1728 kB] Get:17 http://archive.ubuntu.com/ubuntu bionic-backports/universe amd64 Packages [20.6 kB] Get:18 http://archive.ubuntu.com/ubuntu bionic-backports/main amd64 Packages [64.0 kB] Fetched 28.2 MB in 19s (1467 kB/s) Reading package lists... Reading package lists... Building dependency tree... Reading state information... Some packages could not be installed. This may mean that you have requested an impossible situation or if you are using the unstable distribution that some required packages have not yet been created or been moved out of Incoming. The following information may help to resolve the situation: The following packages have unmet dependencies: npm : Depends: node-gyp (>= 0.10.9) but it is not going to be installed E: Unable to correct problems, you have held broken packages. The command '/bin/sh -c apt-get clean && apt-get update && apt-get install --yes --no-install-recommends --no-install-suggests build-essential net-tools inetutils-ping libncurses5-dev libdigest-crc-perl libpopt-dev xxd liblzo2-dev zlib1g-dev lib32z1 libssl-dev libglib2.0-dev libreadline-dev libjson-c-dev libxml2-dev libsqlite3-dev sqlite3 libuv1-dev libxslt1-dev libfcgi-dev libevent-dev libyajl-dev liburiparser-dev libwebsockets-dev locales lua5.1 liblua5.1-dev python python3 python3-dev python3-pip git git-lfs subversion autoconf automake pkg-config ccache cmake ninja-build clang-tools-6.0 bison flex gettext ca-certificates libtool patch vim unzip uuid-dev wget curl cpio bc gawk gdb valgrind diffstat chrpath texinfo ssh openssh-client openssh-server netbase quilt protobuf-c-compiler dropbear-bin openvswitch-switch tmux dirmngr lighttpd alien mlocate iproute2 dos2unix lsb-release rsync gdisk man pax moreutils npm sudo' returned a non-zero code: 100
11-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值