首页 文章 精选 留言 我的

精选列表

搜索[网站开发],共10000篇文章
优秀的个人博客,低调大师

【Android开发坑系列】之PopupWindow

PopupWindow在4.0之前的版本有个系统级别的BUG,必须借助一段自定义的fix代码来修复。其中mPopPm就是PopupWindow实例。java.lang.NullPointerExceptionat android.widget.PopupWindow$1.onScrollChanged if (Build.VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH) { try { final Field fAnchor = PopupWindow.class.getDeclaredField("mAnchor"); fAnchor.setAccessible(true); Field listener = PopupWindow.class.getDeclaredField("mOnScrollChangedListener"); listener.setAccessible(true); final ViewTreeObserver.OnScrollChangedListener originalListener = (ViewTreeObserver.OnScrollChangedListener) listener .get(mPopPm); ViewTreeObserver.OnScrollChangedListener newListener = new ViewTreeObserver.OnScrollChangedListener() { public void onScrollChanged() { try { View mAnchor = (View) fAnchor.get(mPopPm); if (mAnchor == null) { return; } else { originalListener.onScrollChanged(); } } catch (Exception e) { e.printStackTrace(); } } }; listener.set(mPopPm, newListener); } catch (Exception e) { e.printStackTrace(); } 在生成popupWindow的父Activity销毁之前,需要销毁popupWindow。否则会报内存泄露(leak)。也即在Activity的onDestroy()执行如下代码: if (mPopupWindow != null) { mPopupWindow.dismiss(); mPopupWindow = null; } 在<=2.3的系统上,慎用setFocusable(boolean),一般设为mPopPm.setFocusable(false) 本文转自Kai的世界,道法自然博客园博客,原文链接:http://www.cnblogs.com/kaima/p/3160897.html,如需转载请自行联系原作者。

优秀的个人博客,低调大师

【Android开发坑系列】之Fragment

这个东西有顾名思义是碎片,和之前的Activity对应。 坑1:一般情况都会想当然的以为进程被杀掉之后,Fragment也会被回收 其实,Fragment有自己的生命周期,有自己的管理器(FragmentManager),也即:包含Fragment的进程被干掉,Fragment不一定会被回收,而是由FragmentManager来决定生死。 Q:如何验证上面的说法?A:如果是一般正常的流程“打开-关闭”软件,Fragment的确被回收了。但是如果使用“腾讯手机管家”之类的内存清理工具,清理内存(实际上是杀死进程),会发现Fragment没有被回收,一直缓存着。验证方法如下:缓存Fragment的Tag到本地数据库(可以是xml/sqlite等),然后用FragmentManager.findFragmentByTag(...)是否为Null来验证Framgent是否被回收了。 有个奇怪的现状是:在上面蓝色的情况发生后,Framgent和包含他的Activity的生命周期顺序都乱套了,原本是: Activity.onCreate-->Fragment.onCreate-->Fragment.onCreateView 变成:Fragment.onCreate-->Activity.onCreate-->Fragment.onCreateView 猜测是因为直接用的Frament缓存,其onCreate先于父Activity.onCreate执行了。 坑2:添加Fragment注意事项,阅读:http://www.tuicool.com/articles/qaA7ry 本文转自Kai的世界,道法自然博客园博客,原文链接:http://www.cnblogs.com/kaima/p/3178442.html,如需转载请自行联系原作者。

优秀的个人博客,低调大师

iOS开发-获取View截图图像

在做ar的时候突然有取图的需求,小记 先指定图像的大小 UIGraphicsBeginImageContext(view.frame.size); 在指定的区域绘制图像 [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:NO]; 获取图像上下文 UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 关闭图像上下文 UIGraphicsEndImageContext(); 只需要4行代码即可以获取到指定View的图像截图。 另外,常用的绘制图像还有另一个方法: [view.layer renderInContext:UIGraphicsGetCurrentContext()]; 下面补充一个方法例子: + (UIImage *)getImageViewWithView:(UIView *)view{ UIGraphicsBeginImageContext(view.frame.size); [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:NO]; UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return image;}

优秀的个人博客,低调大师

Android应用开发—浅谈MVX模式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/voidreturn/article/details/78177366 MVX模式的文章太多了,这里不会再重述,关键我还不太懂,本文会从自己的一些思考,分析下MVX的分离思想,先占个坑! Android应用架构这篇文章最后讲到: Activity和Fragment变得非常轻量。他们唯一的职责就是建立/更新UI和处理用户事件。因此,他们变得更容易维护。 我不太赞同这个做法:如果view中处理用户事件,那么view就和特定的数据逻辑绑定了,这样这个view很难复用,如果view只将用户事件传回给控制层C层,由C层来处理事件的处理,这样view可以更好的复用(很多ui界面还是可以抽象归类的) 抽象数据还是视图 数据一般是和逻辑密切关联,

优秀的个人博客,低调大师

android 开发之电子钢琴 源码

这个小例子主要用到android手势部分和Mediaplayer部分的知识。 手势部分没啥问题,我们可以通过MotionEvent中定义的Event Code来判断当前手势的状态(按下或者释放等) imageButton_white1.setOnTouchListener(new View.OnTouchListener() {public boolean onTouch(View view, MotionEvent motionEvent) {if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) { play(R.raw.white1);//这个时候创建播放要用的资源文件 imageButton_white1.setImageResource(R.drawable.whiteback1); }if (motionEvent.getAction() == MotionEvent.ACTION_UP) { imageButton_white1.setImageResource(R.drawable.white1); }return false; } }); Mediaplayer部分目前还有个问题没有解决: 每次按下键盘时我都要调用相应的音符 mediaPlayer01 = MediaPlayer.create(Piano.this, resource); 随着按键次数的增加create的次数也随着增加。 只要create的次数到了32次之后,再按键盘就不会响了,这个时候只要改变一下屏幕的方向程序就可以继续运行。 我的理解是create后的资源没有被释放导致的。 但我在代码中也加入了 mediaPlayer01.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {public void onCompletion(MediaPlayer arg0) { mediaPlayer01.release(); Toast.makeText(Piano.this, "资源释放了!", Toast.LENGTH_SHORT).show(); } }); 这样的监听代码。在资源文件播放完成后释放。但运行过程中这部分没有起作用(因为Toast部分没有执行)。 目前还不知道是什么原因造成的。 PS: 今天找到一个解决方法 不使用mediaplayer的监听事件来释放mediaplayer资源了。直接在play的时候先release一次,然后create资源文件。 不过这种做法稍微有点不大合理 为什么资源文件在事件触发的时候才create就不会被正常监听到呢。如果哪位同学知道原因的请帮忙解答下 源文件在这里MyPiano.rar 本文转自qianqianlianmeng博客园博客,原文链接:http://www.cnblogs.com/aimeng/archive/2011/11/17/2253123.html ,如需转载请自行联系原作者

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册