android 开发小贴士3

来源:互联网 发布:淘宝详情图片大小 编辑:程序博客网 时间:2024/06/02 17:22

android:animateLayoutChanges
一直以为 Lollipop Dialer 接通画面里面那些酷炫的动画(文字部分)是很复杂的做出来的,后来发现其实只有一行。
视频 演示:https://dl.pushbulletusercontent.com/N75Bx03taJzFVjjLkMpzzyqGKT8m5PpH/cm_trltexxLMY48Gyilun07312015153119.mp4
只需要加好 android:animateLayoutChanges=”true” 然后 setVisibility 就可以了

清除画布上的内容:canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
在自定义View的onDetachedFromWindow方法中清理与View相关的资源;
Fragment在onAttach方法中接收回调:

@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mPageSelectedListener = (PageSelectedListener) activity;
mMenuBtnOnclickListener = (MenuBtnOnClickListener) activity;
mCommitBtnOnClickListener = (CommitBtnOnClickListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString() + “must implements listener”);
}
}
使用ClipDrawable实现进度条功能;
自定义view中的getContext(),再也不需要专门创建一个mContext全局对象了;
自定义手写view的时候,在手指移动的过程中通过MotionEvent | Android Developers对象的getHistorySize()获得缓存的历史点,绘制出来的曲线要平滑很多。
复写Activity的onUserLeaveHint方法,确保用户离开界面时能够立即暂停界面中的一些任务,关于onUserLeaveHint的更多作用可以谷歌:android - Google 搜索
值得借鉴的点击两次退出应用的实现:Android关于双击退出应用的问题
没那么麻烦,直接用toast的getView().getParent() 判断是不是空就ok了。API 16 测试通过

public class MainActivity extends Activity {

private Toast toast;@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    toast = Toast.makeText(getApplicationContext(), "确定退出?", 0);}public void onBackPressed() {    quitToast();}/*public boolean onKeyDown(int keyCode, KeyEvent event) {    System.out.println(keyCode + "...." + event.getKeyCode());    if(keyCode == KeyEvent.KEYCODE_BACK){        quitToast();    }    return super.onKeyDown(keyCode, event);}*/private void quitToast() {    if(null == toast.getView().getParent()){        toast.show();    }else{        System.exit(0);    }}

}

TimingLogger,SDK自带打印时间戳工具,简直神器。

摘自官方文档:
A utility class to help log timings splits throughout a method call. Typical usage is:

TimingLogger timings = new TimingLogger(TAG, “methodA”);

AtomicInteger,一个提供原子操作的Integer的类。在Java语言中,++i和i++操作并不是线程安全的,在使用的时候,不可避免的会用到synchronized关键字。而AtomicInteger则通过一种线程安全的加减操作接口。这个类在AsyncTask中用到了。
etUserVisibleHint getUserVisibleHint 判断fragment是否可见

0 0
原创粉丝点击