畫圓的思路很簡單,就是生成一個半徑兩倍的正方開的RGB數組,有來裝圓上每個點的象素的顏色,如果這個點與圓心的距離 <= 半徑,則這個點在圓里面,顏色為半透明的,如果與圓心的距離 > 半徑,則這個點在圓外面,全透明,代碼如下:
 PRivate int[] getCircleAry(int radius, int alpha) {
  int[] aryTmp = new int[4*radius*radius];  
  for (int i = 0; i < 4*radius*radius; i++) {
   int x = (int)(i / (2*radius));
   int y = i % (2*radius);
   int iSum = (radius - x)*(radius - x) + (radius - y)*(radius - y);
    橢圓的思路與圓的很相似,假設橢圓的X軸的半徑是6,Y軸的半徑是4,帽橢圓的公式v如下: 
        x2/36 + y2/16 = 1
用數學知識處理一下,分子都乘36*16,則公式變成如下:
        16*x2 + 36*y2 = 36*16
再用這個公式來判斷點是不是在橢圓里面,是則半透明,否則全透明,代碼如下:
 private int[] getEll
ipseAry(int radiusX, int radiusY, int alpha) {
  int[] aryTmp = new int[4 * radiusX * radiusY];
  int iPosX, iPosY, iSum1, iSum2;
  iSum1 = radiusX * radiusX * radiusY * radiusY;  
  for (int i = 0; i < 4 * radiusX * radiusY; i++) {
   iPosX = i % (2 * radiusX); 
   iPosY = (int)(i / (2 * radiusX));
   iSum2 = (radiusX - iPosX) * (radiusX - iPosX) * radiusY * radiusY +
    (radiusY - iPosY) * (radiusY - iPosY) * radiusX * radiusX;
   if (iSum2 > iSum1)
    aryTmp[i] = 0x00FF0000; //全透明
   else
    aryTmp[i] = (alpha << 24)  (0x0000FF & 0x00FFFFFF); //半透明
  }
  
  return aryTmp;  
 }
下面是做出來的效果:
 
下載源代碼:Transparent.rar