91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

資源簡介

參照:http://blog.csdn.net/Poison_H/article/details/43735445。點擊手機屏幕實現水波效果,如下圖:


【核心代碼】

public class WaterWaveView extends SurfaceView implements SurfaceHolder.Callback { // 背景圖的寬度和高度   private int backWidth;   private int backHeight;   /**  * buf1 和 buf2是波能緩沖區,分別代表了每個點的前一時刻和后一時刻的波幅數據  */  private short[] buf1;  private short[] buf2;   private int[] bitmap1;  private int[] bitmap2;  private Bitmap bgImage = null;  // 是否第一次加載  private boolean firstLoad = false;   WavingThread wavingThread = new WavingThread();  // 顯示一個surface的抽象接口,使你可以控制surface的大小和格式, 以及在surface上編輯像素,和監視surace的改變  SurfaceHolder mSurfaceHolder = null;   private int doubleWidth;   private int fiveWidth;  // 持續時間  private int loopTime;   private int bitmapLen;    public WaterWaveView(Context context)
    { super(context);  mSurfaceHolder = getHolder();  mSurfaceHolder.addCallback(this);  } @Override  protected void onSizeChanged(int w, int h, int oldw, int oldh)
    { if (!firstLoad)
        { // 背景圖  bgImage = BitmapFactory.decodeResource(this.getResources(), R.drawable.bg);  bgImage = Bitmap.createScaledBitmap(bgImage, w, h, false);// 縮放而已  backWidth = bgImage.getWidth();  backHeight = bgImage.getHeight();   buf2 = new short[backWidth * backHeight];  buf1 = new short[backWidth * backHeight];   bitmap2 = new int[backWidth * backHeight];  bitmap1 = new int[backWidth * backHeight];   // 將bgImage的像素拷貝到bitmap1數組中,用于渲染。。。  bgImage.getPixels(bitmap1, 0, backWidth, 0, 0, backWidth, backHeight);  bgImage.getPixels(bitmap2, 0, backWidth, 0, 0, backWidth, backHeight);   for (int i = 0; i < backWidth * backHeight;   i)
            { buf2[i] = 0;  buf1[i] = 0;  } doubleWidth = backWidth << 1;   fiveWidth = 5 * backWidth;   loopTime = ((backHeight - 4) * backWidth) >> 1;   bitmapLen = backWidth * backHeight - 1;   firstLoad = true;  }
    } class WavingThread extends Thread
    { boolean running = true;   public void setRunning(boolean running)
        { this.running = running;  } @Override  public void run()
        {
            Canvas c = null;  while (running)
            {
                c = mSurfaceHolder.lockCanvas();  makeRipple();  doDraw(c);  mSurfaceHolder.unlockCanvasAndPost(c);  }
        }
    } /*******************************************************  * 計算波能數據緩沖區  *******************************************************/  private void makeRipple()
    { int k = fiveWidth;  int xoff = 0, yoff = 0;  int cp = 0;   int tarClr = 0;  int i = fiveWidth;  while (i < loopTime)
        { // 波能擴散  buf2[k] = (short) (((buf1[k - 2]   buf1[k   2]   buf1[k - doubleWidth]   buf1[k   doubleWidth]) >> 1) - buf2[k]);   // 波能衰減  buf2[k] = (short) (buf2[k] - (buf2[k] >> 5));   // 求出該點的左上的那個點xoff,yoff  cp = k - doubleWidth - 2;   xoff = buf2[cp - 2] - buf2[cp   2];  yoff = buf2[cp - doubleWidth] - buf2[k - 2];   tarClr = k   yoff * doubleWidth   xoff;  if (tarClr > bitmapLen || tarClr < 0)
            {
                k  = 2;  continue;  } // 復制象素  bitmap2[k] = bitmap1[tarClr];  k  = 2;    i;  } short[] tmpBuf = buf2;  buf2 = buf1;  buf1 = tmpBuf;   } /*****************************************************  * 增加波源 x坐標 y坐標 波源半徑 波源能量  *****************************************************/  private void touchWater(int x, int y, int stonesize, int stoneweight)
    { // 判斷坐標是否在屏幕范圍內  if (x   stonesize > backWidth)
        { return;  } if (y   stonesize > backHeight)
        { return;  } if (x - stonesize < 0)
        { return;  } if (y - stonesize < 0)
        { return;  } // 產生波源,填充前導波能緩沖池  int endStoneX = x   stonesize;  int endStoneY = y   stonesize;  int squaSize = stonesize * stonesize;  int posy = y - stonesize;  int posx = x - stonesize;  for (posy = y - stonesize; posy < endStoneY;   posy)
        { for (posx = x - stonesize; posx < endStoneX;   posx)
            { if ((posx - x) * (posx - x)   (posy - y) * (posy - y) < squaSize)
                { buf1[backWidth * posy   posx] = (short) -stoneweight;  }
            }
        }
    } /*****************************************************  * 增加波源 x坐標 y坐標 波源半徑 波源能量  *****************************************************/  private void trickWater(int x, int y, int stonesize, int stoneweight)
    { // 判斷坐標是否在屏幕范圍內  if (x   stonesize > backWidth)
        { return;  } if (y   stonesize > backHeight)
        { return;  } if (x - stonesize < 0)
        { return;  } if (y - stonesize < 0)
        { return;  } // 產生波源,填充波能緩沖池  int endStoneX = x   stonesize;  int endStoneY = y   stonesize;  int posy = y - stonesize;  int posx = x - stonesize;  for (posy = y - stonesize; posy < endStoneY;   posy)
        { for (posx = x - stonesize; posx < endStoneX;   posx)
            { if (posy >= 0 && posy < backHeight && posx >= 0 && posx < backWidth)
                { buf1[backWidth * posy   posx] = (short) -stoneweight;  }
            }
        }
    } @Override  public boolean onTouchEvent(MotionEvent event)
    { if (event.getAction() == MotionEvent.ACTION_DOWN)
        { // 設置波源半徑和波源能量  touchWater((int) event.getX(), (int) event.getY(), 200, 300);  } else if (event.getAction() == MotionEvent.ACTION_MOVE)
        {
            trickWater((int) event.getX(), (int) event.getY(), 200, 300);  } return true;  } protected void doDraw(Canvas canvas)
    { /**  * Parameters: 1.colors 2.offset 3.stride 4.x 5. y 6.width 7.height  * 8.hasAlpha 9. paint  */  //繪制  canvas.drawBitmap(bitmap2, 0, backWidth, 0, 0, backWidth, backHeight, false, null);   } @Override  public void surfaceCreated(SurfaceHolder holder)
    { wavingThread.setRunning(true);  wavingThread.start();   } @Override  public void surfaceDestroyed(SurfaceHolder holder)
    { boolean retry = true;  wavingThread.setRunning(false);  // 非暴力關閉線程,直到此次該線程運行結束之前,主線程停止運行,以防止Surface被重新激活  while (retry)
        { try  { wavingThread.join(); // 阻塞current  // Thread(當前執行線程)直到被調用線程(thread)完成。  retry = false;  } catch (InterruptedException e)
            {
            }
        }
    } @Override  public void surfaceChanged(SurfaceHolder holder, int format, int width, int height)
    { // TODO Auto-generated method stub   }
}
waterWaveView = new WaterWaveView(this); setContentView(waterWaveView);

資源截圖

代碼片段和文件信息

/**
?*?Automatically?generated?file.?DO?NOT?MODIFY
?*/
package?com.casjs.waterwave.test;

public?final?class?BuildConfig?{
??public?static?final?boolean?DEBUG?=?Boolean.parseBoolean(“true“);
??public?static?final?String?APPLICATION_ID?=?“com.casjs.waterwave.test“;
??public?static?final?String?BUILD_TYPE?=?“debug“;
??public?static?final?String?FLAVOR?=?““;
??public?static?final?int?VERSION_CODE?=?1;
??public?static?final?String?VERSION_NAME?=?“1.0“;
}

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2018-03-05?13:16??WaterWave\
?????文件?????????127??2018-03-05?13:16??WaterWave\.gitignore
?????目錄???????????0??2018-03-05?13:16??WaterWave\.gradle\
?????目錄???????????0??2018-03-05?13:35??WaterWave\.gradle\4.1\
?????目錄???????????0??2018-03-05?13:16??WaterWave\.gradle\4.1\fileChanges\
?????文件???????????1??2018-03-05?14:54??WaterWave\.gradle\4.1\fileChanges\last-build.bin
?????目錄???????????0??2018-03-05?13:35??WaterWave\.gradle\4.1\fileContent\
?????文件??????????17??2018-03-05?14:54??WaterWave\.gradle\4.1\fileContent\fileContent.lock
?????目錄???????????0??2018-03-05?13:16??WaterWave\.gradle\4.1\fileHashes\
?????文件??????266969??2018-03-05?14:54??WaterWave\.gradle\4.1\fileHashes\fileHashes.bin
?????文件??????????17??2018-03-05?14:54??WaterWave\.gradle\4.1\fileHashes\fileHashes.lock
?????文件???????19925??2018-03-05?13:36??WaterWave\.gradle\4.1\fileHashes\resourceHashesCache.bin
?????目錄???????????0??2018-03-05?13:35??WaterWave\.gradle\4.1\javaCompile\
?????文件??????775418??2018-03-05?13:56??WaterWave\.gradle\4.1\javaCompile\classAnalysis.bin
?????文件??????321993??2018-03-05?13:36??WaterWave\.gradle\4.1\javaCompile\jarAnalysis.bin
?????文件??????????17??2018-03-05?13:56??WaterWave\.gradle\4.1\javaCompile\javaCompile.lock
?????文件??????142201??2018-03-05?13:56??WaterWave\.gradle\4.1\javaCompile\taskHistory.bin
?????文件???????20786??2018-03-05?13:56??WaterWave\.gradle\4.1\javaCompile\taskJars.bin
?????目錄???????????0??2018-03-05?13:16??WaterWave\.gradle\4.1\taskHistory\
?????文件?????2343365??2018-03-05?14:53??WaterWave\.gradle\4.1\taskHistory\fileSnapshots.bin
?????文件???????78864??2018-03-05?14:53??WaterWave\.gradle\4.1\taskHistory\taskHistory.bin
?????文件??????????17??2018-03-05?14:54??WaterWave\.gradle\4.1\taskHistory\taskHistory.lock
?????目錄???????????0??2018-03-05?13:16??WaterWave\.gradle\buildOutputCleanup\
?????文件???????????0??2018-03-05?13:16??WaterWave\.gradle\buildOutputCleanup\built.bin
?????文件??????????51??2018-03-05?13:16??WaterWave\.gradle\buildOutputCleanup\cache.properties
?????文件???????????2??2018-03-05?14:54??WaterWave\.gradle\buildOutputCleanup\cache.properties.lock
?????目錄???????????0??2018-03-05?15:08??WaterWave\.idea\
?????文件?????????626??2018-03-05?13:16??WaterWave\.idea\gradle.xml
?????目錄???????????0??2018-03-05?13:22??WaterWave\.idea\libraries\
?????文件?????????533??2018-03-05?13:16??WaterWave\.idea\libraries\android_arch_core_common_1_0_0_jar.xml
?????文件?????????548??2018-03-05?13:16??WaterWave\.idea\libraries\android_arch_lifecycle_common_1_0_0_jar.xml
............此處省略2976個文件信息

評論

共有 條評論