百度地图如何实现图层控制


首先,百度地图是没有图层概念的博客,当我博客们需要实现加载不同类型的博客覆盖物,并对其分别进行控制时,便需要用到图层控制的博客概念.
map.addOverlay();//一个一个加载覆盖物
map.removeOverlay();//删除指定覆盖物
map.clearOverlays();/ /删除所有覆盖物
map.getOverlays();//获取所有覆盖物
if(markers[i].toString()=="[object Marker]"){
    if(markers[i].getTitle()==index)
    markers[i].hide();//隐藏
    }
if(markers[i].toString()=="[object Marker]"){
    if(markers[i].getTitle()==index)
    markers[i].show();//显示
   
覆盖物类型判断 overlay.toString()
"[object Marker]"
"[object Label]"
"[object Circle]"
"[object Polyline]"
"[object Polygon]"
"[object Overlay]"

http://blog.csdn.net/puhanyuan/article/details/77699427加勒比海盗5

东京食尸鬼第二季 (2015)

东京食尸鬼第二季 (2015)

东京食尸鬼第二季 (2015)

更新:
2016-01-07 09:32
状态:
完结,12集全
类型:
动漫 悬疑  恐怖  动作  奇幻  
地区:
日本
语言:
日语
imdb:
未知
主演:
花江夏树  雨宫天  

下载地址暂无图片暂无预告字幕收藏报 错评论

剧情介绍:作品主要讲述了在加勒比海盗5东京街头,一群谜一样的加勒比海盗吃人怪人“喰种”正在加勒比海盗5悄悄扩张他们的加勒比海盗势力范围。平凡地在加勒比海盗5大学就读的加勒比海盗金木研因惨遭喰种猎食而生命垂危,虽然得到器官移植,但他的加勒比海盗器官供给者原本就是喰种,于是他成为了半喰种,命运也就此发生转变。在加勒比海盗5经历了痛苦的加勒比海盗挣扎之后,金木理解了自己喰种的加勒比海盗本性,而决定埋葬自己人类的加勒比海盗部分,作为一名喰种而生存。在加勒比海盗5“强大”的加勒比海盗最后,他所见到的加勒比海盗事物是…

http://www.btbtdy.com/btdy/dy857.html加勒比海盗5

jquery中ajax应用——load()函数

全栈工程师开发手册 (作者:栾鹏)

jquery系列教程6-AJAX全解

jquery中ajax应用之load()函数

$(selector).load(URL,data,callback)函数通常来获取服务器的博客静态文件,URL中可以添加选择器进行筛选。

代码如下:

$("#div1").load("data/demo_test.html #p1",function(){   //将远程文件的博客内容中的博客id=p1的博客元素加载到div1中,并调用回调函数。 });  $("#div1").load("test.jsp",{name:"name1",age:"22"},function(responseTxt,textStatus,XMLHttpRequest){   //可以向远程路径传递参数,返回数据,load的博客发送方式就根据有无数据决定,有数据就是post方式,没有就是get方式     //responseTxt;                                          //请求返回的博客内容     //textStatus;                                           //请求状态  success、error、notmodified、timeout     //XMLHttpRequest;                                       //XMLHttpRequest对象 });

http://blog.csdn.net/luanpeng825485697/article/details/77692908加勒比海盗5

Java值传递和引用传递基础分析

(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/77688416冷血之心的博客博客)


        一年前我博客总结过一篇博客:Java基础之引用(String,char[],Integer)总结于牛客网的博客专项练习题 这篇博客针对Java中值传递和引用传递举了几个例子,进行了分析。这篇博文将再次举出典型案例一起分析。


1、值传递的博客案例:

        @Test  public void method1(){   int x=0;   this.change(x);   System.out.println(x);   }      void change(int i){   i=7;  }

这毫无疑问输出是0

2、请说出以下代码的博客正确输出:

@Test public void method1() {  StringBuffer x = new StringBuffer("Hello");  this.change(x);  System.out.println(x); }  void change(StringBuffer i) {  i.append(" world!"); }

这段代码的博客输出是:Hello world!

为什么?答案见下图:(哈哈,画的博客是丑了点哈~)第二个图是调用函数时出现的博客,函数change中所做的博客操作如图3所示,最后输出x时,引用变量指向的博客堆中发生了变化。所以输出为:Hello world!
Java值传递和引用传递基础分析

3、请问下边代码的博客输出结果是什么?

@Test public void method2() {  StringBuffer x = new StringBuffer("Hello");  change2(x);  System.out.println(x); } void change2(StringBuffer i) {  i = new StringBuffer("hi");  i.append(" world!"); }

输出结果是:Hello,我博客们通过画图来分析分析究竟发生了什么?

由图可以看出来,在博客函数change2中将引用变量i重新指向了堆内存中另一块区域,下边都是对另一块区域进行修改,所以输出是Hello

Java值传递和引用传递基础分析
4、接下来这道题,请大家给出答案?代码如下:

public class Main {  public static void main(String[] args) {   StringBuffer sb = new StringBuffer("Hello ");   System.out.println("Before change, sb = " + sb);   changeData(sb);   System.out.println("After change Data(n), sb = " + sb);  }   public static void changeData(StringBuffer strBuf) {   StringBuffer sb2 = new StringBuffer("Hi ");   strBuf = sb2;   sb2.append("World!");  } }

正确答案为:????

如果大家已经掌握了上边我博客画图的博客精髓,应该可以得出正确答案哦~

如果对你有帮助,记得点赞哦~欢迎大家关注我博客博客博客,可以进群366533258一起交流学习哦~

本群给大家提供一个学习交流的博客平台,内设菜鸟Java管理员一枚、精通算法博客金牌讲师一枚、Android管理员一枚、蓝牙BlueTooth管理员一枚、Web前端管理一枚以及C#管理一枚。欢迎大家进来交流技术。

http://blog.csdn.net/qq_25827845/article/details/77688416加勒比海盗5

jquery中ajax应用——get()和post()

全栈工程师开发手册 (作者:栾鹏)

jquery系列教程6-AJAX全解

jquery中ajax应用——get()和post()

get和post发送数据的博客方式不同,但是在博客jquery的博客ajax中这种区别对用户不可见。get传输的博客数据大小有限制,get请求的博客数据会被浏览器缓存,两种方式在博客服务器端的博客接收不同。

get()
jquery中的博客get函数形式为$.get(URL,data,callback,type);

代码如下:

$.get("web.jsp",{     name:"name1",                                            //get方法中的博客数据不仅可以是映射方法,也可以是"name=name1&age=12"的博客字符串方式,     age:"12"                                                  //如果有中文,要使用编码,"name="+encodeURIComponent("栾鹏")+"&age=12" },function(data,textStatue){                                  //data表示返回的博客内容,可以是xml,JSON文件,HTML片段。textStatus表示请求状态:sucess,error,notmodified,timeout4种     $("#div1").html(data);                                    //如果是html片段,直接设置代码段     username = $(data).find("comment").attr("username");      //如果是xml文档,则使用$转化为dom对象     username = data.username;                                 //如果是json数据,当成对象使用  });

post()
jquery中的博客post函数形式为$.post(URL,data,callback);
代码如下:

$.post("web.jsp", $("#form1").serialize(),                 //serialize序列化表单内容,作为jQuery的博客表单对象的博客函数。     function(data,textStatue){                              //data表示返回的博客内容,可以是xml,JSON文件,HTML片段。textStatus表示请求状态:sucess,error,notmodified,timeout4种     $("#div1").html(data);                                    //如果是html片段,直接设置代码段     username = $(data).find("comment").attr("username");      //如果是xml文档,则使用$转化为dom对象     username = data.username;                                 //如果是json数据,当成对象使用  });

http://blog.csdn.net/luanpeng825485697/article/details/77692912加勒比海盗5

JS中正则表达式的模式匹配

一、常用字符类

  • /w 等价于[a-zA-Z0-9]
  • /W 等价于[^a-zA-Z0-9]
  • /s 任何Unicode空白符(包括空格符、制表符等)
  • /S 任何非Unicode空白符
  • /d 等价于[0-9]
  • /D 等价于[^0-9]

二、重复次数

  • {n,m} 匹配前一项至少n次,至多m次
  • {n,} 匹配前一项至少n次
  • {n} 匹配前一项n次
  • ? 匹配前一项0次或1次
  • +匹配前一项1次或多次
  • *匹配前一项0次或多次

三、分组和引用

  • | 相当于“或”
  • (…) 将几个项组合成一个单元,这个单元可通过”*”、”+”、”?”、”|”等符号修饰,而且可记忆匹配的博客字符串
  • (?:…)把项组合到一个单元,但不记忆
  • /n 引用第n个分组第一次匹配到的博客字符,组索引是从左数的博客左括号,”(?:”形式的博客分组不参与索引(索引从1开始)

四、锚字符

  • ^ 匹配字符串的博客开头,多行检索中匹配一行的博客开头
  • $ 匹配字符串的博客结尾,多行检索中匹配一行的博客结尾
  • /b 匹配一个单词的博客边界
  • /B 匹配非单词边界的博客位置
  • (?=p)要求接下来的博客字符都匹配p,但不包括匹配p的博客字符
  • (?!p) 要求接下来的博客字符都不匹配p

五、修饰符

  • i 执行不区分大小写的博客匹配模式
  • g 执行全局匹配模式,即找到所有匹配的博客字符
  • m 执行多行匹配模式

六、相关String方法

  • search()
    参数是一个正则表达式,返回第一个与之匹配的博客子串的博客起始位置,找不到就返回-1
"JavaScript".search(/Java/i);//返回0
  • replace()
    用指定的博客字符串替换匹配到的博客子串。第一个参数是一个正则表达式,第二个参数是要进行替换的博客字符串,返回替换后的博客字符串
"JavaScriptjavascriptjavascript".replace(/javascript/gi,"Java");//返回"JavaJavaJava"
  • match()
    参数是一个正则表达式,返回一个由匹配结果组成的博客数组。如果正则表达式设置了修饰符g,则该方法返回的博客数组包含字符串中的博客所有匹配结果。
"1 plus 1 equals 2".match(//d/g);//返回["1", "1", "2"]

当正则表达式不是全局检索时,它也会返回一个数组。这时数组的博客第一个元素就是匹配的博客字符串,余下的博客元素是正则表达式中圆括号括起来的博客子表达式匹配。

"123 http://wwww.test.com/hahaha123".match(/(/w+):////([/w.]+)//(/S*)/);//返回["http://wwww.test.com/hahaha123", "http", "wwww.test.com", "hahaha123"]
  • split()
    用于将字符串拆成子串组成的博客数组
"1, 2,      3".split(//s*,/s*/);//返回["1", "2", "3"]

http://blog.csdn.net/lllyyx/article/details/77676756加勒比海盗5

单词查找树(数据结构)


【例3-2】单词查找树


  【问题描述】

     在博客进行文法分析的博客时候,通常需要检测一个单词是否在博客博客们的博客单词列表里。为了提高查找和定位的博客速度,通常都画出与单词列表所对应的博客单词查找树,其特点如下:

  1.根结点不包含字母,除根结点外每一个结点都仅包含一个大写英文字母;

  2.从根结点到某一结点,路径上经过的博客字母依次连起来所构成的博客字母序列,称为该结点对应的博客单词。单词列表中的博客每个单词,都是该单词查找树某个结点所对应的博客单词;

  3.在博客满足上述条件下,该单词查找树的博客结点数最少。

  4.例如图左边的博客单词列表就对应于右边的博客单词查找树。注意,对一个确定的博客单词列表,请统计对应的博客单词查找树的博客结点数(包含根结点)。

【问题输入】

  输入文件名为word.in,该文件为一个单词列表,每一行仅包含一个单词和一个换行/回车符。每个单词仅由大写的博客英文字母组成,长度不超过63个字母 。文件总长度不超过32K,至少有一行数据。

【问题输出】

  输出文件名为word.out,该文件中仅包含一个整数,该整数为单词列表对应的博客单词查找树的博客结点数。 

【样例输入】

   A

   AN

   ASP

   AS

   ASC

   ASCII

   BAS

   BASIC 

【样例输出】

  13  

单词查找树(数据结构)

【算法分析】

     首先要对建树的博客过程有一个了解。对于当前被处理的博客单词和当前树:在博客根结点的博客子结点中找单词的博客第一位字母,若存在博客则进而在博客该结点的博客子结点中寻找第二位……如此下去直到单词结束,即不需要在博客该树中添加结点;或单词的博客第n位不能被找到,即将单词的博客第n位及其后的博客字母依次加入单词查找树中去。但,本问题只是问你结点总数,而非建树方案,且有32K文件,所以应该考虑能不能不通过建树就直接算出结点数?为了说明问题的博客本质,我博客们给出一个定义:一个单词相对于另一个单词的博客差:设单词1的博客长度为L,且与单词2从第N位开始不一致,则说单词1相对于单词2的博客差为L-N+1,这是描述单词相似程度的博客量。可见,将一个单词加入单词树的博客时候,须加入的博客结点数等于该单词树中已有单词的博客差的博客最小值。

     单词的博客字典顺序排列后的博客序列则具有类似的博客特性,即在博客一个字典顺序序列中,第m个单词相对于第m-1个单词的博客差必定是它对于前m-1个单词的博客差中最小的博客。于是,得出建树的博客等效算法:

①读入文件;

②对单词列表进行字典顺序排序;

③依次计算每个单词对前一单词的博客差,并把差累加起来。注意:第  一个单词相对于“空”的博客差为该单词的博客长度;

④累加和再加上1(根结点),输出结果。

就给定的博客样例,按照这个算法求结点数的博客过程如下表:

单词查找树(数据结构)

【数据结构】

     先确定32K(32*1024=32768字节)的博客文件最多有多少单词和字母。当然应该尽可能地存放较短的博客单词。因为单词不重复,所以长度为1的博客单词(单个字母)最多26个;长

度为2的博客单词最多为26*26=676个;因为每个单词后都要一个换行符(换行符在博客计算机中占2个字节),所以总共已经占用的博客空间为:(1+2)*26+(2+2)*676=2782字节;

剩余字节(32768-2782=29986字节)分配给长度为3的博客单词(长度为3的博客单词最多有26*26*26=17576个)有29986/(3+2)≈5997。所以单词数量最多为

26+676+5997=6699。

     定义一个数组:string a[32768];把所有单词连续存放起来,用选择排序或快排对单词进行排序。

单词查找树(数据结构)

先排序,然后找相邻两个单词的博客差值,再进行累加。


代码1:

#include<iostream> #include<string> using namespace std; int i,j,n,t,k; string s; string a[80001];//数组可以达到32768 32K=32*1024=32768 int main() {  freopen("word.in","r",stdin);  freopen("word.out","w",stdout);  while(cin>>a[++n]);//读入文件中的博客单词并且存储在博客数组中   n--;  for(i=1;i<n;i++)//选择排序   {   for(j=i+1;j<=n;j++)   {    if(a[i]>a[j])    {     s=a[i];     a[i]=a[j];     a[j]=s;    }   }  }   t=a[1].length();//第一个单词的博客长度   for(i=2;i<=n;i++)  {   j=0;   while(a[i][j]==a[i-1][j]&&j<a[i-1].length())//求相同的博客长度,如果两个单词一模一样,要加j<a[i-1].lenth(),防止j一直累加     j++;   t+=a[i].length()-j;//累加两个单词的博客差值   }  cout<<t+1<<endl;  return 0; } 

代码2:

#include<iostream> #include<string> #include<algorithm> using namespace std; string s; string a[8001]; int n=0; int t;  int main() {  while(cin>>s)   {   a[++n]=s;  }  //n--;  sort(a+1,a+n+1); // for(int i=1;i<=n;i++) cout<<a[i]<<endl;  t=a[1].length();  for(int i=2;i<=n;i++)  {   int j=0;   while(a[i][j]==a[i-1][j]&&j<a[i-1].length())    j++;   t+=a[i].length()-j;  }   cout<<t+1<<endl;  return 0; }

http://blog.csdn.net/yanyanwenmeng/article/details/77688561加勒比海盗5

js使用排他思想实现导航栏的切换

导航栏的博客切换

html代码如下:

<div class="box">         <ul>             <li class="current">鞋子</li>             <li>袜子</li>             <li>帽子</li>             <li>裤子</li>             <li>裙子</li>         </ul>         <span class="show">鞋子</span>         <span>袜子</span>         <span>帽子</span>         <span>裤子</span>         <span>裙子</span>     </div>     <div class="box">         <ul>             <li class="current">鞋子</li>             <li>袜子</li>             <li>帽子</li>             <li>裤子</li>             <li>裙子</li>         </ul>         <span class="show">鞋子</span>         <span>袜子</span>         <span>帽子</span>         <span>裤子</span>         <span>裙子</span>     </div>

css样式:

<style>     * {         padding: 0;         margin: 0;     }     .box {         width: 500px;         height: 400px;         border: 1px solid #ccc;         margin: 100px auto;         overflow: hidden;     }     ul {         width: 600px;         height: 40px;         margin-left: -1px;         list-style: none;     }     li {         float: left;         width: 101px;         height: 40px;         text-align: center;         font: 600 18px/40px "simsun";         background-color: pink;         cursor: pointer;     }     span {         display: none;         width: 500px;         height: 360px;         background-color: yellow;         text-align: center;         font: 700 150px/360px "simsun";     }     .show {         display: block;     }     .current {         background-color: yellow;     } </style>


js代码如下:

<script>     //首先获取所有的博客li     var box = document.getElementsByClassName("box");     //循环调用函数 有几个box,调用几次 互不影响     for(var i = 0;i<box.length;i++){         fn(box[i]);     }     function fn(ele){         var liArr = ele.getElementsByTagName("li");         var spanArr = ele.getElementsByTagName("span");         for(var i = 0;i < liArr.length;i++){             //为每个li绑定索引值             liArr[i].index = i;             liArr[i].onmouseover = function(){                 //为所有的博客li标签添加鼠标移入事件  排他思想,干掉所有人,设置自己                 for(var j = 0;j<liArr.length;j++){                     liArr[j].className = "";                     spanArr[j].className = "";                 }                 //设置当前鼠标移入的博客类名为current                 this.className = "current";                 //设置当前的博客索引值所对应的博客span标签的博客类名为show                 spanArr[this.index].className = "show";             }         }     } </script>

排他思想:

干掉所有人,设置我博客自己,先将所有人全设置为"",然后再设置当前的博客


运行结果如下:

js使用排他思想实现导航栏的<a href=博客切换”>

http://blog.csdn.net/evan_qb/article/details/77676898加勒比海盗5

关于QQ群头像以及微信讨论组头像的工具类

QQ群头像以及微信讨论组头像工具类介绍

 介绍:

     由于段时间公司项目需求,在博客翻了网上很多代码后发现,很多人用的博客是自定义View的博客办法来实现此类头像的博客效果,但是,这样一来就必须改变项目中原有的博客控件,而且当需要将此图片内容传递到后台时,就会变的博客非常麻烦,所以我博客就从网上找了一个Demo来自己修改,将其变成了一个可以直接生成一张头像图片的博客工具类,这样一来无论你需要什么样的博客操作都会非常方便,可以将这张生成的博客图片随意设置,下面放几张项目的博客图片给各位看一下:

关于QQ群头像以及微信讨论组头像的<a href=博客工具类”>

       下面是微信的博客讨论组头像展示:

关于QQ群头像以及微信讨论组头像的<a href=博客工具类”>

关于QQ群头像以及微信讨论组头像的<a href=博客工具类”>

    主要是用到了三个类:

关于QQ群头像以及微信讨论组头像的<a href=博客工具类”>

     这里的博客JoinBitmaps主要是底层对该图片的博客一些剪裁等处理,JoinLayout是对头像中具体图片绘制时的博客参数进行设置,所以,这两个类其实是网上找的博客牛人写好的博客,TaolunBitmapUtils则是我博客对一些具体方法的博客封装,下面将贴出具体代码内容:

 

public class JoinBitmaps {      public static final void join(Canvas canvas, int dimension, List<Bitmap> bitmaps) {         if (bitmaps == null)             return;         int count = Math.min(bitmaps.size(), JoinLayout.max());         float[] size = JoinLayout.size(count);         join(canvas, dimension, bitmaps, count, size);     }      public static final void join(Canvas canvas, int dimension, List<Bitmap> bitmaps, int count,                                   float[] size) {         join(canvas, dimension, bitmaps, count, size, 0.15f);     }      public static final void join(Canvas canvas, int dimension, List<Bitmap> bitmaps,                                   float gapSize) {         if (bitmaps == null)             return;         int count = Math.min(bitmaps.size(), JoinLayout.max());         float[] size = JoinLayout.size(count);         join(canvas, dimension, bitmaps, count, size, gapSize);     }      public static final void join(Canvas canvas, int dimension, List<Bitmap> bitmaps, int count,                                   float[] size, float gapSize) {         if (bitmaps == null)             return;         // 旋转角度         float[] rotation = JoinLayout.rotation(count);         // paint         Paint paint = new Paint();         paint.setAntiAlias(true);          Matrix matrixJoin = new Matrix();         // scale as join size         matrixJoin.postScale(size[0], size[0]);          canvas.save();         // canvas.drawColor(Color.RED);         // index<count bitmaps.size 可能会越界         for (int index = 0; index < count; index++) {             Bitmap bitmap = bitmaps.get(index);              // MATRIX             Matrix matrix = new Matrix();             // scale as destination             matrix.postScale((float) dimension / bitmap.getWidth(),                     (float) dimension / bitmap.getHeight());              canvas.save();              matrix.postConcat(matrixJoin);              float[] offset = JoinLayout.offset(count, index, dimension, size);             canvas.translate(offset[0], offset[1]);              // 缩放             Bitmap newBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(),                     bitmap.getHeight(), matrix, true);             // 裁剪             Bitmap bitmapOk = createMaskBitmap(newBitmap, newBitmap.getWidth(),                     newBitmap.getHeight(), (int) rotation[index], gapSize);              canvas.drawBitmap(bitmapOk, 0, 0, paint);             canvas.restore();         }          canvas.restore();     }      public static final Bitmap createMaskBitmap(Bitmap bitmap, int viewBoxW, int viewBoxH,                                                 int rotation, float gapSize) {          Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(),                 Bitmap.Config.ARGB_8888);         Canvas canvas = new Canvas(output);         final Paint paint = new Paint();         paint.setAntiAlias(true);// 抗锯齿         paint.setFilterBitmap(true);         int center = Math.round(viewBoxW / 2f);         canvas.drawCircle(center, center, center, paint);         paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));         canvas.drawBitmap(bitmap, 0, 0, paint);          if (rotation != 360) {             Matrix matrix = new Matrix();             // 根据原图的博客中心位置旋转             matrix.setRotate(rotation, viewBoxW / 2, viewBoxH / 2);             canvas.setMatrix(matrix);             paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));             canvas.drawCircle(viewBoxW * (1.5f - gapSize), center, center, paint);         }         return output;     }      public static final Bitmap createBitmap(int width, int height, List<Bitmap> bitmaps) {         int count = Math.min(bitmaps.size(), JoinLayout.max());         float[] size = JoinLayout.size(count);         return createBitmap(width, height, bitmaps, count, size, 0.15f);     }      public static final Bitmap createBitmap(int width, int height, List<Bitmap> bitmaps,                                             int count, float[] size) {         return createBitmap(width, height, bitmaps, count, size, 0.15f);     }      public static final Bitmap createBitmap(int width, int height, List<Bitmap> bitmaps,                                             int count, float[] size, float gapSize) {         Bitmap output = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);         Canvas canvas = new Canvas(output);         int dimen = Math.min(width, height);         join(canvas, dimen, bitmaps, count, size, gapSize);         return output;     }   }

  

public class JoinLayout {       public static final String TAG = JoinLayout.class.getSimpleName();      public static int max() {         return 5;     }      private static final float[][] rotations = { new float[] { 360.0f }, new float[] { 45.0f, 360.0f },             new float[] { 120.0f, 0.0f, -120.0f }, new float[] { 90.0f, 180.0f, -90.0f, 0.0f },             new float[] { 144.0f, 72.0f, 0.0f, -72.0f, -144.0f }, };      public static float[] rotation(int count) {         return count > 0 && count <= rotations.length ? rotations[count - 1] : null;     }      //参数一:圆的博客半径     private static final float[][] sizes = { new float[] { 0.92f, 0.9f },             new float[] { 0.51f, 0.65f }, new float[] { 0.47f, 0.8f },             new float[] { 0.43f, 0.91f }, new float[] { 0.38f, 0.80f } };      public static float[] size(int count) {         return count > 0 && count <= sizes.length ? sizes[count - 1] : null;     }      public static float[] offset(int count, int index, float dimension, float[] size) {         switch (count) {             case 1:                 return offset1(index, dimension, size);             case 2:                 return offset2(index, dimension, size);             case 3:                 return offset3(index, dimension, size);             case 4:                 return offset4(index, dimension, size);             case 5:                 return offset5(index, dimension, size);             default:                 break;         }         return new float[] { 0f, 0f };     }      /**      * 5个头像      *      * @param index      *            下标      * @param dimension      *            画布边长(正方形)      * @param size      *            size[0]缩放 size[1]边距      * @return 下标index X,Y轴坐标      */     private static float[] offset5(int index, float dimension, float[] size) {         // 圆的博客直径         float cd = (float) dimension * size[0];         // 边距         float s1 = -cd * size[1];          float x1 = 0;         float y1 = s1;          float x2 = (float) (s1 * Math.cos(19 * Math.PI / 180));         float y2 = (float) (s1 * Math.sin(18 * Math.PI / 180));          float x3 = (float) (s1 * Math.cos(54 * Math.PI / 180));         float y3 = (float) (-s1 * Math.sin(54 * Math.PI / 180));          float x4 = (float) (-s1 * Math.cos(54 * Math.PI / 180));         float y4 = (float) (-s1 * Math.sin(54 * Math.PI / 180));          float x5 = (float) (-s1 * Math.cos(19 * Math.PI / 180));         float y5 = (float) (s1 * Math.sin(18 * Math.PI / 180));          // Log.d(TAG, "x1:" + x1 + "/y1:" + y1);         // Log.d(TAG, "x2:" + x2 + "/y2:" + y2);         // Log.d(TAG, "x3:" + x3 + "/y3:" + y3);         // Log.d(TAG, "x4:" + x4 + "/y4:" + y4);         // Log.d(TAG, "x5:" + x5 + "/y5:" + y5);          // 居中 Y轴偏移量         float xx1 = (dimension - cd - y3 - s1) / 2 * 0.91f;         // 居中 X轴偏移量         float xxc1 = (dimension - cd) / 2;         // xx1 = xxc1 = -s1;         // xx1 = xxc1 = 0;         switch (index) {             case 0:                 // return new float[] { s1 + xxc1, xx1 };                 return new float[] { x1 + xxc1, y1 + xx1 };             case 1:                 return new float[] { x2 + xxc1, y2 + xx1 };             case 2:                 return new float[] { x3 + xxc1, y3 + xx1 };             case 3:                 return new float[] { x4 + xxc1, y4 + xx1 };             case 4:                 return new float[] { x5 + xxc1, y5 + xx1 };             default:                 break;         }         return new float[] { 0f, 0f };     }      /**      * 4个头像      *      * @param index      *            下标      * @param dimension      *            画布边长(正方形)      * @param size      *            size[0]缩放 size[1]边距      * @return 下标index X,Y轴坐标      */     private static float[] offset4(int index, float dimension, float[] size) {         // 圆的博客直径         float cd = (float) dimension * size[0];         // 边距         float s1 = cd * size[1];          float x1 = 0;         float y1 = 0;          float x2 = s1;         float y2 = y1;          float x3 = s1;         float y3 = s1;          float x4 = x1;         float y4 = y3;          // Log.d(TAG, "x1:" + x1 + "/y1:" + y1);         // Log.d(TAG, "x2:" + x2 + "/y2:" + y2);         // Log.d(TAG, "x3:" + x3 + "/y3:" + y3);         // Log.d(TAG, "x4:" + x4 + "/y4:" + y4);          // 居中 X轴偏移量         float xx1 = (dimension - cd - s1) / 2;         switch (index) {             case 0:                 return new float[] { x1 + xx1, y1 + xx1 };             case 1:                 return new float[] { x2 + xx1, y2 + xx1 };             case 2:                 return new float[] { x3 + xx1, y3 + xx1 };             case 3:                 return new float[] { x4 + xx1, y4 + xx1 };             default:                 break;         }         return new float[] { 0f, 0f };     }      /**      * 3个头像      *      * @param index      *            下标      * @param dimension      *            画布边长(正方形)      * @param size      *            size[0]缩放 size[1]边距      * @return 下标index X,Y轴坐标      */     private static float[] offset3(int index, float dimension, float[] size) {         // 圆的博客直径         float cd = (float) dimension * size[0];         // 边距         float s1 = cd * size[1];         // 第二个圆的博客 Y坐标         float y2 = s1 * (3 / 2);         // 第二个圆的博客 X坐标         float x2 = s1 - y2 / 1.73205f;         // 第三个圆的博客 X坐标         float x3 = s1 * 2 - x2;         // 居中 Y轴偏移量         float xx1 = (dimension - cd - y2) / 2 * 0.18f;         // 居中 X轴偏移量         float xxc1 = (dimension - cd) / 2 - s1;         // xx1 = xxc1 = 0;         switch (index) {             case 0:                 return new float[] { s1 + xxc1, xx1 };             case 1:                 return new float[] { x2 + xxc1, y2 + xx1 };             case 2:                 return new float[] { x3 + xxc1, y2 + xx1 };             default:                 break;         }         return new float[] { 0f, 0f };     }      /**      * 2个头像      *      * @param index      *            下标      * @param dimension      *            画布边长(正方形)      * @param size      *            size[0]缩放 size[1]边距      * @return 下标index X,Y轴坐标      */     private static float[] offset2(int index, float dimension, float[] size) {         // 圆的博客直径         float cd = (float) dimension * size[0];         // 边距         float s1 = cd * size[1];          float x1 = 0;         float y1 = 0;          float x2 = s1;         float y2 = s1;          // Log.d(TAG, "x1:" + x1 + "/y1:" + y1);         // Log.d(TAG, "x2:" + x2 + "/y2:" + y2);          // 居中 X轴偏移量         float xx1 = (dimension - cd - s1) / 2;         switch (index) {             case 0:                 return new float[] { x1 + xx1, y1 + xx1 };             case 1:                 return new float[] { x2 + xx1, y2 + xx1 };             default:                 break;         }         return new float[] { 0f, 0f };     }      /**      * 1个头像      *      * @param index      *            下标      * @param dimension      *            画布边长(正方形)      * @param size      *            size[0]缩放 size[1]边距      * @return 下标index X,Y轴坐标      */     private static float[] offset1(int index, float dimension, float[] size) {         // 圆的博客直径         float cd = (float) dimension * size[0];         float offset = (dimension - cd) / 2;         return new float[] { offset, offset };     } } 

    最后就是我博客整理的博客一些方法,里面都有很详细的博客注解,相信各位都能看得明白。

public class TaolunBitmapUtils {      private static Bitmap[] mbitmap;      /**      *      * @param tempWidth  最终图片的博客宽      * @param tempHeight  最终图片的博客高      * @param bitmaps    放入里面的博客图片集合,可放1-5个数量      * @return   返回最终的博客Bitmap类型,并且是经过圆形剪裁的博客最终图片      *      *  仿照QQ讨论组的博客头像,此方法的博客背景颜色已固定,可以在博客此代码修改      */     public static Bitmap CircleTaolunBitmap(int tempWidth, int tempHeight, List<Bitmap> bitmaps){           if(bitmaps.size()<1 && bitmaps.size() >5){             return null;         }          Bitmap bitmap = bitmaps.get(0);         if(bitmap == null){             return null;         }           Bitmap canvasBitmap = Bitmap.createBitmap(tempWidth, tempHeight,                 Bitmap.Config.ARGB_8888);         Canvas localCanvas = new Canvas(canvasBitmap);         localCanvas.drawColor(Color.parseColor("#d1dedf"));          JoinBitmaps.join(localCanvas, Math.min(tempWidth, tempHeight),bitmaps);          return GetRoundedCornerBitmap(canvasBitmap);     }      /**      *      * @param tempWidth   最终图片的博客宽      * @param tempHeight  最终图片的博客高      * @param bitmaps     放入里面的博客图片集合,可放1-5个数量      * @param background  可以设定最终图的博客背景颜色      * @return   返回最终的博客Bitmap类型,并且是经过圆形剪裁的博客最终图片      *      * 仿QQ讨论组头像的博客方法,此方法的博客背景颜色可以修改      */     public static Bitmap CircleTaolunBitmap(int tempWidth, int tempHeight, List<Bitmap> bitmaps,int background){          //防止输入的博客集合为空         if(bitmaps.size()<1 && bitmaps.size() >5){             return null;         }          //取出第一张图片检验是否为空         Bitmap bitmap = bitmaps.get(0);         if(bitmap == null){             return null;         }          Bitmap canvasBitmap = Bitmap.createBitmap(tempWidth, tempHeight,                 Bitmap.Config.ARGB_8888);         Canvas localCanvas = new Canvas(canvasBitmap);         localCanvas.drawColor(background);          JoinBitmaps.join(localCanvas, Math.min(tempWidth, tempHeight),bitmaps);          return GetRoundedCornerBitmap(canvasBitmap);     }          private static int padding = 2; /** 图片之间的博客距离 */     private static int cornor = 0;/** 内部图片的博客圆角值 */     private static Bitmap[] paramList ;      /**      *    此方法是仿微信讨论组头像的博客制作方法      *      * @param context 上下文对象      * @param tempWidth 所显示最终图片的博客宽      * @param tempHeight 所显示最终图片的博客高      * @param bitmaps  内层图片存放的博客bitmap集合      * @return   仿微信讨论组头像的博客最终图片bitmap      */      public static Bitmap SquareTaolunzuBitmap(Context context,int tempWidth,int tempHeight,List<Bitmap> bitmaps){             // 重置padding                 padding = 2;          paramList = bitmaps.toArray(new Bitmap[bitmaps.size()]);          if (paramList.length < 1 && paramList.length > 9) {             return null;         }         // 先取一个获取宽和高         Bitmap tempBitmap = (Bitmap) paramList[0];         if (tempBitmap == null) {             return null;         }          // 创建一个空格的博客bitmap         Bitmap canvasBitmap = Bitmap.createBitmap(tempWidth, tempHeight,                 Bitmap.Config.ARGB_8888);         // 头像的博客数量         int bitmapCount = paramList.length;         Canvas localCanvas = new Canvas(canvasBitmap);         localCanvas.drawColor(Color.parseColor("#d1dedf"));         int colum = 0;          if (bitmapCount > 1 && bitmapCount < 5) {             colum = 2;         } else if (bitmapCount > 4 && bitmapCount < 10) {             colum = 3;         } else {             colum = 1;         }         float scale = 1.0F / colum;         // 根据列数缩小         Bitmap scaledBitmap = scaleBitmap(scale, tempBitmap);         if (padding > 0) {             padding = dip2px(context, padding);             // 如果有内边距 再次缩小             float paddingScale = (float) (tempWidth - (colum + 1) * padding)                     / colum / scaledBitmap.getWidth();             scaledBitmap = scaleBitmap(paddingScale, scaledBitmap);             scale = scale * paddingScale;         }         // 第一行的博客 头像个数         int topRowCount = bitmapCount % colum;         // 满行的博客行数         int rowCount = bitmapCount / colum;         if (topRowCount > 0) {             // 如果第一行头像个数大于零 行数加1             rowCount++;         } else if (topRowCount == 0) {             // 6 或者 9 第一行头像个数和列数一致             topRowCount = colum;         }         // 缩小后头像的博客宽         int scaledWidth = scaledBitmap.getWidth();         // 缩小后头像的博客高         int scaledHeight = scaledBitmap.getHeight();         // 第一个头像与画布顶部的博客距离         int firstTop = ((tempHeight - (rowCount * scaledHeight + (rowCount + 1)                 * padding)) / 2)                 + padding;         // 第一个头像与画布左部的博客距离         int firstLeft = ((tempWidth - (topRowCount * scaledWidth + (topRowCount + 1)                 * padding)) / 2)                 + padding;         for (int i = 0; i < paramList.length; i++) {             if (i == 9) {// 达到上限 停止                 break;             }             // 按照最终压缩比例压缩             Bitmap bit = scaleBitmap(scale, (Bitmap) paramList[i]);             if (cornor > 0) {                 // 圆角化                 bit = GetRoundedCornerBitmap(bit);             }             localCanvas.drawBitmap(bit, firstLeft, firstTop, null);             firstLeft += (scaledWidth + padding);             if (i == topRowCount - 1 | tempWidth - firstLeft < scaledWidth) {                 firstTop += (scaledHeight + padding);                 firstLeft = padding;             }             bit.recycle();         }         // 重置padding        // padding = 2;         localCanvas.save(Canvas.ALL_SAVE_FLAG);         localCanvas.restore();         return canvasBitmap;      }          /**      *    此方法是可以修改背景的博客仿微信讨论组头像的博客制作方法      *      * @param context 上下文对象      * @param tempWidth 所显示最终图片的博客宽      * @param tempHeight 所显示最终图片的博客高      * @param bitmaps  内层图片存放的博客bitmap集合      * @param background  可以修改头像的博客底层背景      * @return   仿微信讨论组头像的博客最终图片bitmap      */       public static Bitmap SquareTaolunzuBitmap(Context context,int tempWidth,int tempHeight,List<Bitmap> bitmaps,int background){          // 重置padding         padding = 2;         paramList = bitmaps.toArray(new Bitmap[bitmaps.size()]);          if (paramList.length < 1 && paramList.length > 9) {             return null;         }         // 先取一个获取宽和高         Bitmap tempBitmap = (Bitmap) paramList[0];         if (tempBitmap == null) {             return null;         }          // 创建一个空格的博客bitmap         Bitmap canvasBitmap = Bitmap.createBitmap(tempWidth, tempHeight,                 Bitmap.Config.ARGB_8888);         // 头像的博客数量         int bitmapCount = paramList.length;         Canvas localCanvas = new Canvas(canvasBitmap);         localCanvas.drawColor(background);         int colum = 0;          if (bitmapCount > 1 && bitmapCount < 5) {             colum = 2;         } else if (bitmapCount > 4 && bitmapCount < 10) {             colum = 3;         } else {             colum = 1;         }         float scale = 1.0F / colum;         // 根据列数缩小         Bitmap scaledBitmap = scaleBitmap(scale, tempBitmap);         if (padding > 0) {             padding = dip2px(context, padding);             // 如果有内边距 再次缩小             float paddingScale = (float) (tempWidth - (colum + 1) * padding)                     / colum / scaledBitmap.getWidth();             scaledBitmap = scaleBitmap(paddingScale, scaledBitmap);             scale = scale * paddingScale;         }         // 第一行的博客 头像个数         int topRowCount = bitmapCount % colum;         // 满行的博客行数         int rowCount = bitmapCount / colum;         if (topRowCount > 0) {             // 如果第一行头像个数大于零 行数加1             rowCount++;         } else if (topRowCount == 0) {             // 6 或者 9 第一行头像个数和列数一致             topRowCount = colum;         }         // 缩小后头像的博客宽         int scaledWidth = scaledBitmap.getWidth();         // 缩小后头像的博客高         int scaledHeight = scaledBitmap.getHeight();         // 第一个头像与画布顶部的博客距离         int firstTop = ((tempHeight - (rowCount * scaledHeight + (rowCount + 1)                 * padding)) / 2)                 + padding;         // 第一个头像与画布左部的博客距离         int firstLeft = ((tempWidth - (topRowCount * scaledWidth + (topRowCount + 1)                 * padding)) / 2)                 + padding;         for (int i = 0; i < paramList.length; i++) {             if (i == 9) {// 达到上限 停止                 break;             }             // 按照最终压缩比例压缩             Bitmap bit = scaleBitmap(scale, (Bitmap) paramList[i]);             if (cornor > 0) {                 // 圆角化                 bit = GetRoundedCornerBitmap(bit);             }             localCanvas.drawBitmap(bit, firstLeft, firstTop, null);             firstLeft += (scaledWidth + padding);             if (i == topRowCount - 1 | tempWidth - firstLeft < scaledWidth) {                 firstTop += (scaledHeight + padding);                 firstLeft = padding;             }             bit.recycle();         }         // 重置padding         //padding = 2;         localCanvas.save(Canvas.ALL_SAVE_FLAG);         localCanvas.restore();         return canvasBitmap;      }        //绘制仿微信讨论组头像内部头像的博客重新剪裁图片bitmap    按比例缩放图片     private static Bitmap scaleBitmap(float paramFloat, Bitmap paramBitmap) {         Matrix localMatrix = new Matrix();         localMatrix.postScale(paramFloat, paramFloat);         //找出内部图片的博客最短距离,以这个长度来进行重新绘制得到正方形图片         int chang = Math.min(paramBitmap.getWidth(), paramBitmap.getHeight());         return Bitmap.createBitmap(paramBitmap, 0, 0,chang ,chang                , localMatrix, true);     }      //此方法用于仿微信讨论组头像的博客尺寸转换   即转换为设备独立像素dip     private static int dip2px(Context context, float value) {         return (int) (TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,                 value, context.getResources().getDisplayMetrics()) + 0.5f);     }       /**      *    将图片剪裁成圆形的博客工具类      * @param bitmap   传入一张图片  bitmap      * @return    返回此图片裁剪成圆形之后的博客bitmap      */     private static Bitmap GetRoundedCornerBitmap(Bitmap bitmap) {         try {             Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),                     bitmap.getHeight(), Bitmap.Config.ARGB_8888);             Canvas canvas = new Canvas(output);             final Paint paint = new Paint();             final Rect rect = new Rect(0, 0, bitmap.getWidth(),                     bitmap.getHeight());             final RectF rectF = new RectF(new Rect(0, 0, bitmap.getWidth(),                     bitmap.getHeight()));             paint.setAntiAlias(true);             canvas.drawARGB(0, 0, 0, 0);             paint.setColor(Color.BLACK);              int width = bitmap.getWidth();             int height = bitmap.getHeight();             int cornor = Math.min(width,height);              canvas.drawRoundRect(rectF, cornor, cornor, paint);             paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));              final Rect src = new Rect(0, 0, bitmap.getWidth(),                     bitmap.getHeight());              canvas.drawBitmap(bitmap, src, rect, paint);             return output;         } catch (Exception e) {             return bitmap;         }     }      } 

使用:     

当然,最后免不了讲一下使用的博客步骤:

1.将这三个工具类放到自己项目的博客文件夹下面;

2.在博客需要的博客地方调用相应的博客方法来生成一张Bitmap;


          2.1qq群头像使用示例:

  private ImageView[] name =new ImageView[id.length];     private List<Bitmap> qq = new ArrayList<>();//作为QQ群头像的博客数据源 
 //QQ3个头像         Bitmap bitmap4 = BitmapFactory.decodeResource(getResources(),R.mipmap.a1);         Bitmap bitmap5 = BitmapFactory.decodeResource(getResources(),R.mipmap.a2);         Bitmap bitmap6 = BitmapFactory.decodeResource(getResources(),R.mipmap.a3);         qq.clear();         qq.add(bitmap4);         qq.add(bitmap5);         qq.add(bitmap6);         Bitmap data2 = TaolunBitmapUtils.CircleTaolunBitmap(150,150,qq);         name[2].setImageBitmap(data2);            //改变头像背景         Bitmap datas2 = TaolunBitmapUtils.CircleTaolunBitmap(150,150,qq, Color.parseColor("#cc805f"));         name[7].setImageBitmap(datas2);
     这里是生成一张具有三个头像的博客图片例子,这里需要特别注意的博客是,TaolunBitmapUtils这个类中所有的博客方法都是需要给一个Bitmap类型的博客List集合,之后,相应的博客方法中会自动将集合里面的博客Bitmap取出来制作成一张头像图片。例如,这里的博客CircleTaolunBitmap()方法中的博客最后一个参数qq就是已经写好的博客Bitmap集合,最终返回的博客这张Bitmap就是你所需要的博客图片了,在博客这里我博客将它放在博客了ImageView上面,至于下面的博客4个参数的博客CircleTaolunBitmap()中最后一个参数是设置的博客整个图片的博客背景色,需要的博客可以在博客这里自由设置。
       2.2微信讨论组头像使用示例
   private ImageView[] name =new ImageView[id.length];     private List<Bitmap> wx = new ArrayList<>();//作为微信讨论组头像的博客数据源
        Bitmap bitmap91 = BitmapFactory.decodeResource(getResources(),R.mipmap.a1);         Bitmap bitmap92 = BitmapFactory.decodeResource(getResources(),R.mipmap.a2);         Bitmap bitmap93 = BitmapFactory.decodeResource(getResources(),R.mipmap.a3);         Bitmap bitmap94 = BitmapFactory.decodeResource(getResources(),R.mipmap.a4);         Bitmap bitmap95 = BitmapFactory.decodeResource(getResources(),R.mipmap.a5);         Bitmap bitmap96 = BitmapFactory.decodeResource(getResources(),R.mipmap.a6);         Bitmap bitmap97 = BitmapFactory.decodeResource(getResources(),R.mipmap.a1);         Bitmap bitmap98 = BitmapFactory.decodeResource(getResources(),R.mipmap.a2);         Bitmap bitmap99 = BitmapFactory.decodeResource(getResources(),R.mipmap.a3);         wx.clear();         wx.add(bitmap91);         wx.add(bitmap92);         wx.add(bitmap93);         wx.add(bitmap94);         wx.add(bitmap95);         wx.add(bitmap96);         wx.add(bitmap97);         wx.add(bitmap98);         wx.add(bitmap99);         Bitmap data9 = TaolunBitmapUtils.SquareTaolunzuBitmap(this,170,170,wx);         name[2].setImageBitmap(data9);         //改变头像背景         Bitmap datas9 = TaolunBitmapUtils.SquareTaolunzuBitmap(this,170,170,wx, Color.parseColor("#a45d97"));         name[5].setImageBitmap(datas9);
     这里是设置微信头像的博客例子,原理还是跟上面一样,主要调用的博客是SquareTaolunzuBitmap()这个方法了,第一个参数环境变量,第二三个参数分别是宽跟高,最后一个参数同样是Bitmap类型的博客List集合,倒数第二行的博客代码中,多的博客那一个参数也是对背景颜色的博客设置,供给这方面有所需要的博客童鞋们使用。

总结:

     基本的博客介绍就到这里为止了,如果还有不明白的博客地方可以参考下面的博客链接中的博客Demo,里面我博客都尽可能详细地加了很多注解,而且,三个页面都是最简单的博客方式进行呈现的博客,或者还可以私信我博客,虽然不常常上线,但是在博客看到的博客时候会尽快回复的博客
    最后,如果哪里还有不好的博客地方请各位及时指出,我博客也会尽力改正的博客
关于QQ群头像以及微信讨论组头像的博客工具类下载链接:http://download.csdn.net/download/yu537476/9955248
关于QQ群头像以及微信讨论组头像的博客工具类Demo链接:http://download.csdn.net/download/yu537476/9955253   Github地址:https://github.com/byb-software/TaolunBitmapUtils.git

        原创内容请勿随意转载!

  

http://blog.csdn.net/yu537476/article/details/77675954加勒比海盗5

jquery中ajax应用中的通用ajax()函数

全栈工程师开发手册 (作者:栾鹏)

jquery系列教程6-AJAX全解

jquery中ajax应用——通用ajax函数

jquery提供了比get和post更加通用的博客ajax()

代码如下:

$.ajax(options) $.ajax({     type:"POST",                                               //方式     url:"test.jsp",                                            //地址     dataType:"JSON",                                           //数据类型  xml(xml文档),html(html代码),script(js代码),json(json数据),jsonp(jsonp格式数据),text(纯文本)     beforeSend:function(XMLHttpRequest){                        //发送前函数, 这里可以修改XMLHttpRequest,例如添加HTTP头     },     complete:function(XMLHttpRequest,textStatus){               //请求完成函数,请求成功或失败均调用此函数     },     sucess:function(data,textStatus){                           //请求成功,成功返回,    //data有可能是xmlDoc,jsonObj,html,text等等     },     error:function(XMLHttpRequest,textStatus,errorThrown){      //请求失败函数     },     global:true                                                 //是否触发全局ajax事件,默认为true。全局函数开启,任何jquery类能调用后面的博客ajax全局函数 });

全局ajax函数

任何jquery对象都可以调用全局ajax函数
代码如下:

$("#loading").ajaxStart(function(){});   //ajaxStart请求开,ajaxStop请求结束   ajaxComplete请求完成    ajaxError请求错误    ajaxSend发送请求前    ajaxSucess请求成功

http://blog.csdn.net/luanpeng825485697/article/details/77692921加勒比海盗5