- 博客(35)
- 资源 (8)
- 收藏
- 关注
原创 kotlin 之于 java 的差异
一.变量声名,赋值和访问kotlin 变量是空安全的,一般要求声明时就赋值。声名变量有两个关键字var和val,其中val相当于 java 的中的final。变量类型可显式给出,也可隐式推断。变量也可分可空类型和非空类型。以下给出几种声名和初始化示例说明var a:String="hello" //显式声明String 类型变量private var b="hello" //隐式声明,可推断
2017-09-04 22:41:24 336
原创 全局监控 click 点击事件的四种方式
本文主要给大家分享如何在全局上去监听 click 点击事件,并做些通用处理或是拦截。使用场景可能就是具体的全局防快速重复点击,或是通用打点分析上报,用户行为监控等。以下将以四种不同的思路和实现方式去监控全局的点击操作,由简单到复杂逐一讲解。方式一,适配监听接口,预留全局处理接口并作为所有监听器的基类使用抽象出公共基类监听对象,可预留拦截机制和通用点击处理,简要代码如下:public abstract
2017-08-13 20:04:33 5530
原创 全局监控 click事件的四种方式
本文主要给大家分享如何在全局上去监听 click 点击事件,并做些通用处理或是拦截。使用场景可能就是具体的全局防快速重复点击,或是通用打点分析上报,用户行为监控等。以下将以四种不同的思路和实现方式去监控全局的点击操作,由简单到复杂逐一讲解。方式一,适配监听接口,预留全局处理接口并作为所有监听器的基类使用抽象出公共基类监听对象,可预留拦截机制和通用点击处理,简要代码如下:public abstract
2017-08-10 00:02:48 3512 1
原创 RecyclerView 全面的源码分析
RecyclerView 概要RecyclerView是Android 5.0开始提供一个可回收容器,它比 ListView更先进灵活更具,可高效重用和滚动,能方便定制各种布局和交互效果。它继承自 ViewGroup,那么它展示和交互也离不开 measure , layout , draw , touch ,adapter 五步。后面将以这五步来抽丝剥茧分析其工作原理,其中 LayoutManage
2017-07-14 07:59:38 547
原创 自定义滑动容器,支持双向滑动和悬停吸顶
介绍PageScrollView是一个继承于ViewGroup的自定义容器类,如其名它支持ScrollView和ViewPager两种滑动效果。无需嵌套LinearLayout,可支持不定宽高的子View视图。支持水平和垂直方向的布局和手势,支持任意子View滑动吸顶或是吸底悬停的交互。支持ViewPager 固有的PageTransform动画和PageChangeListener 等接口
2017-07-12 22:40:30 627
原创 画出 View 的层级 3D 视图和树形图来分析层级关系
HierarchyLayout 介绍HierarchyLayout是一个自定义的ViewGroup工具,用于分析视图的层级关系,并画出层级树的结构图和可交互的3D 层级。可计算出最大层级深度和平均层级,每层分布等信息。还可显示最近一次 measure layout draw 的时间。
2017-07-12 22:37:36 1053
原创 自定义 ViewGroup 集合,高效布局。
WidgetLayout是一组继承于ViewGroup的自定义容器集合,大部分支持描边和内容分割线,为了高效布局,优化层级而生。目前实现了列等分布局ColumnLayout, 支持任意 View 的下拉刷新 NestRefreshLayout, 滑动容器 PageScrollLayout ,标签容器 LabelLayout,嵌套滑动吸顶容器 NestFloatLayout 等。
2017-07-12 22:32:12 1441 2
原创 android 通知栏的实现
最近做一个项目,其中一个要加入的功能是常驻Notification栏,以前写的时候只能出现 在“通知”这一组中,想把它放在“正在运行”组中却不知道怎么放,查了下官方文档,找到了方法,在notification的flags字段中加一下 “FLAG_ONGOING_EVENT”就可以了。同时我也把Notification的使用方法给总结了一下。详见下文:(1)、使用系统定义的Notificat
2012-11-26 14:46:42 11579 1
原创 Android编程中的常见小问题
问题一:-dialog的半透明背景的灰度在我们继承系统dialog实现自己的dialog时,可以通过设置style来实现 @android:color/transparent @android:color/transparent 0.8 @android:col
2012-09-10 22:57:41 2872
原创 Android opengles2.0 背景透明
在Android上开发OpenGL ES应用时,默认的背景不透明的,即使使用了glClearColor来设置了不透明度为0,且纹理图片中有透明的部分也可能被GLView的背景填充。那么首先解决GLView的透明背景问题吧。要设置透明的第一步是将GLView所在的Activity中的主题属性设置为:android:theme=”@style/Theme.Translucent” 。这样就可以
2012-09-07 23:46:53 8842 6
转载 OpenGL ES 三种类型修饰 uniform attribute varying
1.uniform变量uniform变量是外部application程序传递给(vertex和fragment)shader的变量。因此它是application通过函数glUniform**()函数赋值的。在(vertex和fragment)shader程序内部,uniform变量就像是C语言里面的常量(const ),它不能被shader程序修改。(shader只能用,不能改)
2012-08-08 17:44:53 12576 1
原创 自定义抽屉 指定把手
SlidingDrawer这个控件顾名思义就像抽屉一样,抽屉里面的东西(content)是对外面隐藏的,只有抽屉的把手(handle)是暴露在外面的。当用户触动把手时,抽屉内隐藏的内容就会呈现。 配置上采用了水平展开或垂直展开两种(android:orientation)方式,在XML里必须指定其使用的android:handle 与android:content,前者委托要展开的图片(Layou
2012-08-05 23:33:50 3220
转载 ES OpenGL10 函数介绍
javax.microedition.khronos.opengles接口GL10上级接口:GL下级接口:GL11公共接口GL10继承于GLGL10接口包含了Java(TM)程序语言为OpenGL绑定的核心功能。OES_byte_coordinates,OES_single_precision,OES_fixed_point,OES_read_format,以及OES_comp
2012-08-03 13:17:18 1348
转载 OpenGL 纹理
大概步骤:1.创建纹理对象,并为他指定一个纹理. 2.确定纹理如何应用到每个像素上. 3.启用纹理贴图 4.绘制场景,提供纹理和几何坐标 过滤:由于我们提供的纹理图像很少能和最终的屏幕坐标形成对应,大小不同,所以需要设置过滤项目.允许我们进行插值或者匀和,指定放大缩小的函数.glTexParameter*(),使用过滤模式GL_NEAREST那么纹理单位最邻近的
2012-07-31 19:49:00 2685
原创 关于Android的触摸消息小结
Android中跟Touch事件有关的事件有三个: public boolean dispatchTouchEvent(MotionEvent ev):传递Touch事件至target view(可以是自己)。 public boolean onInterceptTouchEvent(MotionEvent ev):在ViewGroup中定义,用于拦截Touch事件的传递。
2012-07-19 16:40:06 806
原创 MFC创建自定义消息
创建自定义消息程序步骤:1:用ClassWard创建一个新project命名为:MessageTest2:此project选单文档,取消Active X支持,取消打印支持,其它默认。finish.3:在菜单中添加一个菜单“测试”其子菜单为"test",并映射其执行方法:OnTest4: 制造消息发送者:在资源中新增一个对话框,并用classward为其创建类名为 TestD
2012-07-15 00:00:59 887
原创 VC画图
1、画笔 有两种形式创建画笔 一是直接通过GetStockObject()函数来调用 二是通过创建画笔来调用 HPEN CreatePen( int fnPenStyle, // pen style int nWidth, // pen width COLORREF crColor // pen color );
2012-07-14 23:59:53 416
原创 vc运行可执行文件的三个API
一>.WinExec 类似System()命令行。原型:UINT WinExec( LPCSTR lpCmdLine, // address of command line UINT uCmdShow // window style for new application);用于十六位操作系统及兼容系统.例如:WinExec("notepad.e
2012-07-14 23:58:49 556
原创 文件操作
1.文件的查找 当对一个文件操作时,如果不知道该文件是否存在,就要首先进行查找。MFC中有一个专门用来进行文件查找的类CFileFind,使用它可以方便快捷地进行文件的查找。下面这段代码演示了这个类的最基本使用方法。 CString strFileTitle; CFileFind finder; BOOL bWorking = finder.FindFile("C:
2012-07-14 23:57:22 467
原创 CfileDlg与文件操作
构造CFileDialog ST对象。可以传送最常用的参数(parameters)到参数列表(argument list)。//参数:// [IN] bOpenFileDialog// 设置成TRUE构造一个打开文件对话框,FALSE为保存文件对话框。// [IN] lpszDefExt//
2012-07-14 23:56:29 2917
原创 显示位图
一。显示位图,需要做如下工作:void 类名::ShowMap(){CStatic* pStatic=(CStatic*)GetDlgItem(IDC_DISPLAY2);///据待贴位图的控件ID得到它的控制对象。CDC* pDC=pStatic->GetDC();//待贴位图的控件的dcCBitmap bitmap;bitmap.LoadBitmap(IDB_BI
2012-07-14 23:55:00 704
原创 读bmp文件信息结构
CString bmpfileName; //bmp图像路径。CFile bitmapFile; //文件操作类。bitmapFile.Open(fileName,CFile::modeRead) //打开图像文件。 BITMAPFILEHEADER m_pBmpFileHeader=(BITMAPFILEHEADER*) new char [sizeof(BITMAPF
2012-07-14 23:53:48 555
原创 位图结构
BMP文件结构 1. BMP文件组成 BMP文件由文件头、位图信息头、颜色信息和图形数据四部分组成。 2. BMP文件头 BMP文件头数据结构含有BMP文件的类型、文件大小和位图起始位置等信息。 其结构定义如下:typedef struct tagBITMAPFILEHEADER{WORDbfType; // 位图文件的类型,
2012-07-14 23:52:42 414
原创 控制台输入函数的用法
附:cin.ignore();cin.get()//跳过一个字符,例如不想要的回车,空格等字符1、cin>> 用法1:最基本,也是最常用的用法,输入一个变量: cin>> 是会过滤掉不可见字符(如 空格 回车,TAB 等) cin>>noskipws>>input[j];//不想略过空白字符,那就使用 noskipws 流控制2、cin.get()用法1: cin
2012-07-14 23:50:35 877
原创 拷贝构造函数和赋值运算符
重点:包含动态分配成员的类 应提供拷贝构造函数,并重载"="赋值操作符。以下讨论中将用到的例子:class CExample{public: CExample(){pBuffer=NULL; nSize=0;} ~CExample(){delete pBuffer;} void Init(int n){ pBuffer=new char[n]; nSi
2012-07-14 23:48:55 319
原创 Const修饰符作用
1.1.1. 定义普通常量const double PI = 3.1414926;const int POOL_SIZE = 20;定义常量有三种方法:宏、const、enum,其中宏应该尽量避免,而const与enum也各有优缺点,最大的区别就是enum只能用于定义整数,而不能定义浮点数;而对于定义逻辑关系较近的一组整数时比较适合使用enum,也可以考虑使用类代替enum。常量必
2012-07-14 23:34:00 1178
原创 函数指针
一.函数指针变量的申明 就象某一数据变量的内存地址可以存储在相应的指针变量中一样,函数的首地址也以存储在某个函数指针变量里的。这样,我就可以通过这个函数指针变量来调用所指向的函数了。 在C系列语言中,任何一个变量,总是要先申明,之后才能使用的。声明形式:函数返回类型+(* 函数指针名)+(函数的参数表)。如声名一个返回值为void具有一个int型的参数的函数指针如下: vo
2012-07-14 23:32:25 530
原创 PlaySound详解
PlaySound函数的声明为:BOOL PlaySound(LPCSTR pszSound, HMODULE hmod,DWORD fdwSound);PlaySound(NULL,NULL,NULL);停止播放。 参数pszSound是指定了要播放声音的字符串(一般是绝对路径,如果把声音文件拷到可执行文件所在路径就可以直接用声音文件名),该参数可以是WAVE文件的名字,或是WA
2012-07-14 23:29:44 21082 6
原创 获取IP地址
要获取IP地址,首先必须得到机器的主机名(hostname),调用gethostname就可以实现,有了主机名,接下来调用gethostbyname来获取包括IP地址在内的更多的主机信息。gethostbyname返回一个指向hostent数据结构的指针,这个结构在文件中是这样定义的: // 由go to definition 知 struct hostent {
2012-07-14 23:27:07 769
原创 VC中网络编程的常用函数及UDP,TCP协议编程步骤
1.SOCKET类型SOCKET是socket套接字类型,在WINSOCK2.H中有如下定义:typedef unsigned int u_int;typedef u_int SOCKET;可知套接字实际上就是一个无符号整型,它将被Socket环境管理和使用。套接字将被创建、设置、用来发送和接收数据,最后会被关闭。2.WORD类型、MAKEWORD、L
2012-07-14 23:23:55 895
原创 MFC通过ADO连SQL2000数据库
和连接Oracle差不多,操作有点不一样呗!1.在StdAfx.h头文件中加入此句子#import "c:\program files\common files\system\ado\msado15.dll"\no_namespace rename("EOF","adoEOF")2.在App类的InitInstance()函数中加入::CoInitialize(NULL);//表示
2012-07-14 23:21:25 983
原创 对话框调用与背景小结
模态对话框的调用通常如下:CDialog dia;dia.DoModal();而非模态对话框的调用如下:CDialog *pDia;pDia=new CDialog;pDia.Create(IDD_DIALOG,this);pDia.ShowWindow(SW_SHOW);通常我们可以把pDia这个指针设为对话框所在类的成员变量,或者在类中重载PostNcDestr
2012-07-14 23:08:16 566
原创 排序小结
排序算法是一种基本并且常用的算法。由于实际工作中处理的数量巨大,所以排序算法对算法本身的速度要求很高。 第一部分是简单排序算法,后面你将看到他们的共同点是算法复杂度为O(N*N)(因为没有使用word,所以无法打出上标和下标)。 第二部分是高级排序算法,复杂度为O(Log2(N))。这里我们只介绍一种算法。另外还有几种算法因为涉及树与堆的概念,所以这里不于讨论。
2012-07-14 11:42:20 702
原创 vc找不到MFC42D.DLL文件
在VC环境下编的程序在VS平台上运行时(默认是DEBUG版编译)会出现报错:找不到MFC42D.DLL及fatal error LNK1103: debugging information corrupt; recompile module 其实一般在编程序时,都是生成了调试版的程序,就是在那个Debug目录下的可执行文件。运行这调试版的exe文件,都会动态连接 MFC42D.DLL和MS
2012-07-14 11:39:39 2771
原创 CString,TCHAR ,string,char等数据类型转换
由于我习惯用的是VS2008,也提醒初用它的朋友: VS中默认的是在UNICODE字符编码,所以字符串数据要用(TEXT)或_T转换下如:CString str=_T("good luck with you!");。平时我们用到的一些数据类型需要转换才可以正常使用,下面简单的介绍下常用的数据类型转换:string 转 CStringCString.format(”%s”, string.c
2012-07-14 11:33:16 684
Android OpenGL Earth 旋转地球
2012-08-05
基于Android平台的相册管家
2012-07-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人