首页 文章 精选 留言 我的

精选列表

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

Android GIS开发系列计划

本系列博客的整理与写作计划如下,计划3个月(至2018.2)完成。 第一部分, 入门季 第二部分, Android基础季 第三部分, Data Flow 季 第四部分, 可视化季 第五部分, GIS常见应用季 第六部分, GIS算法季 第七部分, GIS工程应用案例季 第八部分, 学术季 其中,第一季中的15篇文章的粗略的内容,已借鉴网络某系列博客的原始内容,尚未加工处理与改善,计划17年12月中旬之前完成初稿。 没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。 本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/7757495.html ,如需转载请自行联系原作者

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

Windows 搭建Hadoop 2.7.3开发环境

1、安装配置Java环境 1.1、安装Windows版本的jkd应用程序 当前的系统环境是64位Windows 7,因此下载64位JDK,下载地址:http://download.oracle.com/otn-pub/java/jdk/8u151-b12/e758a0de34e24606bca991d704f6dcbf/jdk-8u151-windows-x64.exe 下载后直接点击安装,默认的安装位置为:C:\Java\jdk 1.2、配置Java环境变量 鼠标右键 "我的电脑"-->"属性" 点击左边 "高级系统设置"-->"环境变量" 增加JAVA_HOME变量,在系统变量点击 "新建" 变量:JAVA_HOME 变量值:C:\Java\jdk 在path上增加java安装路径,找到path点击"编辑" 在最后增加:;%JAVA_HOME%\bin;%JAVA_HOME%\lib;%JAVA_HOME%\jre\bin 增加CLASSPATH 变量:CLASSPATH 变量值:%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar java的环境变量设置完成后,在命令提示符输入命令检查:java -version 如果输出java信息说明环境设置完成; 2、安装配置Hadoop 2.1、下载安装Hadoop 下载Hadoop 2.7.3,下载地址:找到2.7.3版本,下载hadoop-2.7.3.tar.gz 将下载的hadoop-2.7.3.tar.gz解压移动到:C:\Usr\local\ 2.2、配置Hadoop 2.2.1、配置Hadoop环境变量 配置Hadoop环境变量:HADOOP_HOME,方法参照java 新建HADOOP_CONF_DIR变量:变量值:%HADOOP_HOME%\etc\hadoop 新建YARN_CONF_DIR变量:变量值:%HADOOP_CONF_DIR% 配置Hadoop path变量:%HADOOP_HOME%/bin 2.2.2、配置Hadoop配置文件 Hadoop配置文件存放在:C:\Usr\local\hadoop-2.7.3\etc\hadoop,在C:\Usr\local\hadoop-2.7.3目录下创建文件夹hdfs/{datanode,namenode} 2.2.2.1、 配置core-site.xml <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> </configuration> 2.2.2.2、 配置hdfs-site.xml <configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>/C:/Usr\local/hadoop-2.7.3/hdfs/namenode</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>/C:/Usr/local/hadoop-2.7.3/hdfs/datanode</value> </property> </configuration> 2.2.2.3、 配置mapred-site.xml <configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration> 2.2.2.4、 配置yarn-site.xml <configuration> <!-- Site specific YARN configuration properties --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name> <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property </configuration> 2.2.2.5、 配置slaves localhost 2.2.2.6、 配置hadoop-env.cmd 将JAVA_HOME修改为:set JAVA_HOME=C:\PROGRA~1\Java\jdk1.8.0_131并在后面追加如下设置: set HADOOP_IDENT_STRING=%USERNAME% set HADOOP_PREFIX=C:\Usr\local\hadoop-2.7.3 set HADOOP_CONF_DIR=%HADOOP_PREFIX%\etc\hadoop set YARN_CONF_DIR=%HADOOP_CONF_DIR% set PATH=%PATH%;%HADOOP_PREFIX%\bin 注:C:\PROGRA~1用于替代C:\Program Files 2.3、替换Hadoop windows可执行程序 下载winutils相关,hadoop在windows上运行需要winutils支持和hadoop.dll等文件。下载地址下载对应版本的就可以,例如我用的是2.7.3,可以直接下载2.7.1的就好。然后把winutils.exe和hadoop.dll复制到hadoop的bin目录下; 2.4、启动Hadoop 1.格式化HDFS 打开cmd cd c:\usr\local\hadoop-2.7.3\bin hdfs namenode -format 2.启动Hadoop 打开cmd cd c:\usr\local\hadoop-2.7.3\sbin start-all.cmd YARN管理界面:http://localhost:8088 HDFS管理界面:http://localhost:50070 3.简单的HDFS操作 查看信息:hadoop fs -ls hdfs://localhost:9000/ 创建目录: · hadoop fs -lmkdir hdfs://localhost:9000/user/wc· 上传文件:hadoop fs -put C:\Usr\local\hadoop\LICENSE.txt hdfs://localhost:9000/user/wc 本文转自 巴利奇 51CTO博客,原文链接:http://blog.51cto.com/balich/2058194

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

openstack nova 开发 CURL list 记录

CURL list [ -------------------------------- ] 1, delete nova.network curl -v -X DELETE -H 'X-Auth-Token: d7f3d029deb54a7fa354b3ded882150a' -H 'X-Tenant-Id: 842748637c7c419a9af9e787350aca6b' -H 'X-User-Id: ea15fa0ea7034fb89fa991585aca9325' -H "Content-type: application/json" http://0.0.0.0:8774/v2/842748637c7c419a9af9e787350aca6b/vpdc_networks/f35f6419-1a76-4b8a-b985-b2595b49338a | python -mjson.tool 2, create nova.network (vlan100 模式) curl -v -X POST -H 'X-Auth-Token: d3ba55778f4745e4804c2e7689669d49' -H 'X-Tenant-Id: 842748637c7c419a9af9e787350aca6b' -H 'X-User-Id: e745ac0e1c594895991a34bc92c939fc' -H "Content-type: application/json" -d '{"network": { "label": "lan", "vlan": 100, "dns1": "114.114.114.114", "dns2": "8.8.8.8", "vlan_start":100, "security_lan_id":123, "network_size":62, "dhcp_enabled": true }}'http://0.0.0.0:8774/v2/842748637c7c419a9af9e787350aca6b/***_networks 2, create nova.network (FlatDHCPManager 模式) curl -v -X POST -H 'X-Auth-Token: 9fb501eee04842b3bc232bac65d20942' -H 'X-Tenant-Id: 842748637c7c419a9af9e787350aca6b' -H 'X-User-Id: e745ac0e1c594895991a34bc92c939fc' -H "Content-type: application/json" -d '{"network": { "label": "lan", "vlan": 100, "dns1": "114.114.114.114", "dns2": "8.8.8.8", "security_lan_id":123, "network_size":62, "dhcp_enabled": true }}' http://0.0.0.0:8774/v2/842748637c7c419a9af9e787350aca6b/***_networks 3, show nova.network curl -v -X GET -H 'X-Auth-Token: d7f3d029deb54a7fa354b3ded882150a' -H 'X-Tenant-Id: 842748637c7c419a9af9e787350aca6b' -H 'X-User-Id: ea15fa0ea7034fb89fa991585aca9325' -H "Content-type: application/json" http://0.0.0.0:8774/v2/842748637c7c419a9af9e787350aca6b/vpdc_networks/f35f6419-1a76-4b8a-b985-b2595b49338a | python -mjson.tool 4, history_monitor nova.api curl -v -d '{historyControl: {hN:HSCloudNode001, iT:cpu,sT:1377672552.412417, eT:1377673544.507965}}' -i http://127.0.0.1:8774/v2/842748637c7c419a9af9e787350aca6b/wqservers/1/action -X POST -H X-Auth-Project-Id: 842748637c7c419a9af9e787350aca6b -H Accept: application/json -H X-Auth-Token: 6740bb82db184190b5b90ff0d23203b9 -H Content-Type: application/json 4, 获取token ID, curl -d '{"auth": {"tenantName": "admin", "passwordCredentials": {"username": "admin", "password": "admin"}}}' -H "Content-type: application/json" http://127.0.0.1:35357/v2.0/tokens | python -m json.tool 5, ioctl nova.compute curl -v -d '{"ioControl": {"instance_name":"instance-0000000d","limit_size":"50MB"}}' -i http://127.0.0.1:8774/v2/842748637c7c419a9af9e787350aca6b/servers/59d83dc5-3cfe-4488-b62e-1d338445457a/action -X POST -H "X-Auth-Project-Id: 842748637c7c419a9af9e787350aca6b" -H "Accept: application/json" -H "X-Auth-Token: f406297155a24bffb9a52aa9da5b3e89" -H "Content-Type: application/json" 本文转自 swq499809608 51CTO博客,原文链接:http://blog.51cto.com/swq499809608/1298829

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

openstack API 开发 - 关于获取token

1, 获取token curl -d '{"auth": {"tenantName": "admin", "passwordCredentials": {"username": "admin", "password": "admin"}}}' -H "Content-type: application/json" http://127.0.0.1:35357/v2.0/tokens | python -m json.tool 2,根据token,发送API请求 curl -v -d '{"migrate2": {"force_hosts":"hostname"}}' -i http://127.0.0.1:8774/v2/{project_id}/servers/{vm_uuid}/action -X POST -H "X-Auth-Project-Id: {project_id}" -H "Accept: application/json" -H "X-Auth-Token: {token_id}" -H "Content-Type: application/json" 3,实例 curl -v -d '{"ioControl": {"instance_name":"instance-0000000d","limit_size":"50MB"}}' -i http://127.0.0.1:8774/v2/842748637c7c419a9af9e787350aca6b/servers/59d83dc5-3cfe-4488-b62e-1d338445457a/action -X POST -H "X-Auth-Project-Id: 842748637c7c419a9af9e787350aca6b" -H "Accept: application/json" -H "X-Auth-Token: f406297155a24bffb9a52aa9da5b3e89" -H "Content-Type: application/json" 本文转自 swq499809608 51CTO博客,原文链接:http://blog.51cto.com/swq499809608/1255933

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

iOS开发-沙盒(sandbox)机制

苹果前天发的财报,貌似现在用ios系统的比以前又多了一些,但是大家的iPhone购买的渠道也是五花八门,有的从非正规渠道购买的iPhone里的操作系统已经被越狱过,越狱这个事情和Android的root刷机是是一样的,正常情况下大家用手机都是没问题的。不过有些人总是觉得iOS和Android各种用的不爽,需要管理员权限,不过凡事有利有弊,以前有人买苹果刷机是因为输入法。现在输入法问题解决了,还是有人越狱,花几千大洋买个iPhone然后越狱,这种事情想想都很。。 Android系统中应用程序安装后,系统会为其分配一个独立的存储空间(Security Sandbox),存放字节码文件、资源文件及配置文件,同时为应用程序分配唯一的ID,标识应用程序的相关文件和资源,系统通过设置权限从而实现一个应用程序在一般情况下只能访问该应用程序的文件和资源。iOS操作系统差不多类似,iOS是从苹果的next操作系统发展过来的,next是一款类unix操作系统,unix系统对于文件权限的限制非常严格,正常情况下普通用户常用的操作根本用不到root权限,用户的操作请求假如是已分配权限,自然可以执行,反之需要root权限的话就不被允许。对于应用程序而言也是同样的,分配一个空间,然后只有允许的权限才能访问内容。 下面是张苹果官网以前关于沙盒方面的图片: 上面这个图就是常说的每个应用程序都有自己的存储空间,应用程序不能翻过自己的围墙去访问别的存储空间的内容,应用程序请求的数据都要通过权限检测,假如不符合条件的话,不会被放行。其实简单理解每个应用都是其独立的分配空间,比如说如果360可以访问QQ聊天的内容,那么估计Pony就破产了~ sandbox的启用流程:①sandbox_init 通过libsandbox.dylib转换为二进制传递给kernelmac syscallTrustedBSD ②将sandbox_init 的请求发sandbox.kext 的扩展(看到这里会想到IIS扩展), 扩展为当前进程安装证书,然后返回安装结果.③如果安装成功,每次进程的请求,都会被trusted bsd 发送给sandbox.kext 去匹配之前安装的证书规则。如果证书不匹配的话,则安装失败。 为了看下xCode模拟器中启动的Demo路径和类型,可以进行接下来的操作,在 viewDidLoad加一句话: 1 NSLog (@ "路径:%@" , NSHomeDirectory ()); 这个时候会看到一个路径,测试生成结果: 1 路径:/Users/用户名/Library/Developer/CoreSimulator/Devices/C53A5D69-DEDD-4598-9297-79B811E14DAD/data/Containers/Data/Application/0FCDA696-03B4-4D8D-B99B-E94D1F843561 打开Finder是没法找到这个路径的,需要在终端中输入命令显示隐藏文件: 终端中显示隐藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool true 终端中不显示隐藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool false 模拟器的信息在CoreSimulator中: 路径比较长,之后是模拟器型号,模拟器的具体信息: 之后在Data中可以看到具体应用信息,和一个应用包括的目录信息: Documents目录存储的是程序中创建的或在程序中浏览到的文件数据,Library存储程序的默认设置或其它 状态信息;Library下的Caches目录存放缓存文件,Library下的Preferences目录存放的应用程序的偏好设置,tmp保存的是创建和存放的临时文件,以上路径也可以通过程序获取路径viewDidLoad中加入以下代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 //获取Documents文件夹目录,NSDocumentDirectory获取Doucments文件夹目录,NSUserDomainMask是在当前应用沙盒中获取,所有应用沙盒目录组成一个数组结构的数据存放 NSArray *documentPath = NSSearchPathForDirectoriesInDomains ( NSDocumentDirectory , NSUserDomainMask , YES ); NSLog (@ "Documents目录:%@" ,[documentPath objectAtIndex:0]); //缓存Cache目录 NSArray *cachePath = NSSearchPathForDirectoriesInDomains ( NSCachesDirectory , NSUserDomainMask , YES ); NSLog (@ "缓存目录:%@" ,[cachePath objectAtIndex:0]); //Library目录 NSArray *domainPath = NSSearchPathForDirectoriesInDomains ( NSLibraryDirectory , NSUserDomainMask , YES ); NSLog (@ "资源库目录:%@" ,[domainPath objectAtIndex:0]); //临时文件temp目录 NSLog (@ "临时文件目录:%@" , NSTemporaryDirectory ()); 本文转自Fly_Elephant博客园博客,原文链接:http://www.cnblogs.com/xiaofeixiang/p/4257394.html,如需转载请自行联系原作者

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

Android开发——内存优化 图片处理

8. 用缓存避免内存泄漏 很常见的一个例子就是图片的三级缓存结构,分别为网络缓存,本地缓存以及内存缓存。在内存缓存逻辑类中,通常会定义这样的集合类。 [java] view plain copy privateHashMap<String,Bitmap>mMemoryCache=newHashMap<String,Bitmap>();//String类为该图片对应url 三级缓存结构过程介绍: 在用户切换到展示图片的界面时,当然是优先判断内存缓存是否为Null,不为空直接展示图片,若为空,同样的逻辑去判断本地缓存(不为空便设置内存缓存并展示图片),本地缓存再为空才会根据该图片的url用网络下载类去下载该图片并展示图片(当然了,下载到图片后会有设置本地缓存以及内存缓存的操作)。 内存泄漏的问题就出现在内存缓存中:只要HashMap对象实例被引用,而Bitmap对象又都是强引用,Bitmap中图片越来越多,即便是内存溢出了,垃圾回收器也不会处理。 解决方案: (1)我们可以选择使用软引用,从而在内存不足时,垃圾回收器更容易回收Bitmap垃圾。 [java] view plain copy privateHashMap<String,SoftReference<Bitmap>>mMemoryCache=newHashMap<String,SoftReference<Bitmap>>(); (2)Android2.3以后,SoftReference不再可靠。垃圾回收期更容易回收它,不再是内存不足时才回收软引用。那么缓存机制便失去了意义。 Google官方建议使用LruCache作为缓存的集合类。其实内部封装了LinkedHashMap。内部原理是一直判断集合大小是否超出给定的最大值,超出就把最早最少使用的对象踢出集合。 [java] view plain copy privateLruCache<String,Bitmap>mMemoryCache=newLruCache<String,Bitmap> ((int)(Runtime.getRuntime().maxMemory()/8)){ //用最大内存的1/8分配给这个集合使用 //让这个集合知道每个图片的大小 @Override protectedintsizeOf(Stringkey,Bitmapvalue){ intbyteCount=value.getRowBytes()*value.getHeight();//计算图片大小,每行字节数*高度 returnbyteCount; } }; 9. 优化Bitmap避免内存泄漏 Android中很多控件比如ListView/GridView/ViewPaper通常都会包含很多图片,特别是快速滑动的时候可能加载大量的图片,因此对图片进行优化处理显得尤为重要。 9.1 图片质量压缩 [java] view plain copy publicstaticBitmapcompressImage(Bitmapbitmap){ ByteArrayOutputStreambaos=newByteArrayOutputStream(); //质量压缩方法,参数100表示不压缩,把压缩后的数据存放到baos中 bitmap.compress(Bitmap.CompressFormat.JPEG,100,baos); intoptions=100; //循环判断如果压缩后图片大小>50kb就继续压缩 while(baos.toByteArray().length/1024>50){ //清空baos baos.reset(); bitmap.compress(Bitmap.CompressFormat.JPEG,options,baos); options-=10;//每次都减少10 } //把压缩后的数据baos存放到ByteArrayInputStream中 ByteArrayInputStreamisBm=newByteArrayInputStream(baos.toByteArray()); //把ByteArrayInputStream数据生成图片 BitmapnewBitmap=BitmapFactory.decodeStream(isBm,null,null); returnnewBitmap; } 9.2 图片尺寸裁剪 如果说没有裁剪,下载下来是200*200,而ImageView本身是100*100的,具体原因可以参考这篇文章,这样就浪费了一部分内存。 使用BitmapFactory.Options设置inSampleSize就可以缩小图片。如果该值为2,则缩略图的宽和高都是原始图片的1/2,图片的大小就为原始大小的1/4(小于等于1不缩放)。具体方法如下: 既然有了inSampleSize的概念,我们就要对比实际图片大小和ImageView控件的大小,如果使用内存直接处理实际图片的Bitmap从而得到实际大小的话,就失去了图片尺寸裁剪的意义,因为内存已经被消耗了。因此BitmapFactory.Options提供了inJustDecodeBounds标志位,当它被设置为true后,再使用decode系列方法时,并不会真正的分配内存空间,这样解码出来的Bitmap为null,但是可以计算出原始图片的真实宽高,即options.outWidth和options.outHeight。通过这两个值,就可以知道图片是否过大了。 [java] view plain copy BitmapFactory.Optionsoptions=newBitmapFactory.Options(); options.inJustDecodeBounds=true; BitmapFactory.decodeResource(getResources(),R.id.myimage,options); intimageHeight=options.outHeight; intimageWidth=options.outWidth; StringimageType=options.outMimeType; 这里提供了一个calculateInSampleSize()工具方法来帮我们根据实际情况动态计算合适的inSampleSize。 [java] view plain copy publicstaticintcalculateInSampleSize(//参2和3为ImageView期待的图片大小 BitmapFactory.Optionsoptions,intreqWidth,intreqHeight){ //图片的实际大小 finalintheight=options.outHeight; finalintwidth=options.outWidth; //默认值 intinSampleSize=1; //动态计算inSampleSize的值 if(height>reqHeight||width>reqWidth){ finalinthalfHeight=height/2; finalinthalfWidth=width/2; while((halfHeight/inSampleSize)>=reqHeight&&(halfWidth/inSampleSize)>=reqWidth){ inSampleSize*=2; } } returninSampleSize; } 创建一个完整的缩略图方案: [java] view plain copy publicstaticBitmapdecodeSampledBitmapFromResource(Resourcesres,intresId, intreqWidth,intreqHeight){ finalBitmapFactory.Optionsoptions=newBitmapFactory.Options(); options.inJustDecodeBounds=true; BitmapFactory.decodeResource(res,resId,options); //计算inSampleSize,因为前面已经设置过标志位并调用了decode方法,所以参数option包含了真实宽高信息 options.inSampleSize=calculateInSampleSize(options,reqWidth,reqHeight); //别忘记将opts.inJustDecodeBound设置回false,否则获取的bitmap对象还是null options.inJustDecodeBounds=false; //重新加载图片 returnBitmapFactory.decodeResource(res,resId,options); } 当我们在使用ImageView进行设置图片资源时: [java] view plain copy mImageView.setImageBitmap(//ImageView所期望的图片大小为100*100像素 decodeSampledBitmapFromResource(getResources(),R.id.myimage,100,100)); 9.3 改变图片颜色模式 Android默认的颜色格式是ARGB_8888,在不要求透明度的情况下可以改成RGB_565,这样每个像素占用的内从可从4byte将为2byte。 一张分辨率为1920x1080的图片,如果Bitmap使用ARGB_8888格式显示的话,占用的内存将是1920x1080x4个字节,将近8M内存。 10. 及时回收资源 (1)当界面不可见时我们应当将所有和界面相关的资源进行释放。 我们可以在Activity中重写onTrimMemory()方法,通过switch这个方法中的level参数,判断它是不是等于TRIM_MEMORY_UI_HIDDEN,就说明用户已经离开了我们的程序,此时就可以进行UI相关资源释放操作了,如下所示: [java] view plain copy @Override publicvoidonTrimMemory(intlevel){ super.onTrimMemory(level); switch(level){ caseTRIM_MEMORY_UI_HIDDEN: //进行资源释放操作 break; } } 比如Android3.0开始支持的属性动画中有一类无限循环的动画,它会通过View间接持有Activity的引用,如果没有在onDestroy中停止动画(animator.cancel()),就会泄漏当前的Activity。说起动画,还有一点就是减少帧动画的使用。 (2)Google也建议在onStop()方法中释放资源,但是和上面的释放UI资源是有区别的,因为onStop()方法只是当一个Activity不可见的时候就会调用,比如说用户打开了我们程序中的另一个ActivityB。在onStop()方法中适合去关闭一些读写文件的资源、数据库操作相关的资源等等。 但是像UI相关的资源应该一直要等到onTrimMemory(TRIM_MEMORY_UI_HIDDEN)这个回调之后才去释放,否则从ActivityB回到ActivityA,UI相关的资源会重新加载。 至此关于Android内存泄漏的内容总结完毕。 本文转自 一点点征服 博客园博客,原文链接:http://www.cnblogs.com/ldq2016/p/6692174.html,如需转载请自行联系原作者

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

【Android开发坑系列】之事件

总结一下: 1.Touch事件分发中只有两个主角: ViewGroup和View。 ViewGroup包含onInterceptTouchEvent、dispatchTouchEvent、onTouchEvent三个相关事件。View包含dispatchTouchEvent、onTouchEvent两个相关事件。其中ViewGroup又继承于View。 2.触摸事件由Action_Down、Action_Move、Aciton_UP组成,其中一次完整的触摸事件中,Down和Up都只有最多一个,Move有若干个,可以为0个。定律:当dispatchTouchEvent在进行事件分发的时候,只有前一个action返回被处理(消费)掉,才会触发后一个action。 3.事件传递的两种方式:隧道方式:从根元素依次往下传递直到最内层子元素或在中间某一元素中由于某一条件停止传递;冒泡方式:从最内层子元素依次往外传递直到根元素或在中间某一元素中由于某一条件停止传递。 dispatchTouchEvent是隧道方式,onTouchEvent是冒泡方式(若返回true,则上层不再处理)。 4.onInterceptTouchEvent有两个作用: 拦截Down事件的分发; 中止Up和Move事件向目标View传递,使得目标View所在的ViewGroup捕获Up和Move事件。 参考:http://blog.csdn.net/liutao5757124/article/details/6097125 本文转自Kai的世界,道法自然博客园博客,原文链接:http://www.cnblogs.com/kaima/p/4788625.html,如需转载请自行联系原作者。

资源下载

更多资源
Mario

Mario

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

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

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等操作系统。

用户登录
用户注册