Android鍥惧儚澶勭悊鎶€鏈紙瀹炵幇Android涓殑PS锛夛紙鍏級
16lz
2021-01-23
濂藉惂锛屽叧浜嶢ndroid涓浘鍍忓鐞嗙殑鏈€鍚庝竴涓井鍗氾紝淇濊瘉鏄渶鍚庝竴涓簡锛屽笇鏈涙偿钀屼笉瑕侀獋鎴戙€傘€傘€?/p>
浠婂ぉ鎯冲疄鐜扮殑鏁堟灉鏄細缁堟瀬澶ф嫑锛氬埄鐢˙itmapMesh鏉ュ疄鐜颁竴浜涚壒鏁堛€?
褰撶劧锛孊itmapMesh鍔熻兘鍗佸垎寮哄ぇ锛屾墦寮€澶у鐨勮剳娲烇紝鐩镐俊澶у浼氳璁″嚭鏇寸偒涓界殑鐗规晥锛?/p>
鍜屽線甯镐竴鏍凤紝棣栧厛锛屼笂鏁堟灉鍥撅紝鍗栦釜钀岋細
鎬庝箞鏍凤紝鏅€氱殑涓€寮犲浘鎸夋寮︽洸绾胯烦璧疯垶鏉ヤ簡銆傘€傘€?/p>
鐒跺悗锛屽紑濮嬪惂锛?/p>
棣栧厛锛岃嚜瀹氫箟View锛欱itmapMeshView锛?/p>
public class BitmapMeshView extends View { //鍚庨潰璺宠垶鐨勯偅寮犲浘鐗?/span> private Bitmap mBitmap; //姣忎釜鏍煎瓙鐨勫搴?/span> private int WIDTH = 200; //姣忎釜鏍煎瓙鐨勯珮搴?/span> private int HEIGHT = 200; //浜ょ偣鐨勬€讳釜鏁帮紝姣斿璇翠竴涓笁琛屼笁鍒楃殑琛ㄦ牸锛屽叡鏈?*4=16涓妭鐐癸紝涓嶄俊鑷繁鏁版暟鐪?/span> private int COUNT = (WIDTH + 1) * (HEIGHT + 1); //鐢ㄦ潵瀛樻斁鏇存敼鍚庣殑姣忎釜鐐圭殑鍧愭爣锛氳鏄庝竴鐐癸紝杩欓噷鎴戜滑鐢ㄨ繛缁殑涓や釜鐐硅〃绀轰竴涓潗鏍囷細 //姣斿璇磛erts[0]鍜寁erts[1]鑱斿悎琛ㄧず绗竴涓妭鐐瑰潗鏍囷紝verts[2]鍜寁erts[3]鑱斿悎琛ㄧず绗簩涓妭鐐瑰潗鏍囷紝浠ユ绫绘帹 private float verts[] = new float[COUNT * 2]; private float origs[] = new float[COUNT * 2]; //鏇存敼鍓嶆瘡涓偣鐨勫潗鏍?/span> private float k = 0; //绗嚑涓偣 private int index=0; //涓嶈浜嗐€傘€?/span> public BitmapMeshView(Context context, AttributeSet attrs) { super(context, attrs); initView(); } private void initView() { //浠庤祫婧愪腑鍔犺浇涓€寮犲浘鐗?/span> mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.a); //寰楀埌鍥剧墖鐨勫鍜岄珮 float bmWidth = mBitmap.getWidth(); float bmHeight = mBitmap.getHeight(); //閬嶅巻鎵€鏈夎妭鐐癸紝璁板綍鎵€鏈夌偣鐨勫潗鏍囷細 for (int i = 0; i < HEIGHT + 1; i++) { //寰楀埌褰撳墠鑺傜偣鐨刌杞村潗鏍囷細Y杞村潗鏍囧氨鏄綋褰撳墠琛屼腑鎵€鍗犵殑姣斾緥锛屽ソ濂芥兂鎯筹紝涓嶉毦 float fy = bmHeight * i / HEIGHT; for (int j = 0; j < WIDTH + 1; j++) { //寰楀埌褰撳墠鑺傜偣鐨刋杞村潗鏍囷細X杞村潗鏍囧氨鏄綋褰撳墠琛屼腑鎵€鍗犵殑姣斾緥锛?/span> float fx=bmWidth*j/WIDTH; //鑾峰緱鍘熷鍧愭爣锛屾兂鎯冲氨鐭ラ亾浜?/span> origs[index*2+0]=verts[index*2+0]=fx; //鎻愪竴涓嬶細杩欓噷fy+50鏄鍥剧墖寰€涓嬪钩绉讳竴娈佃窛绂伙紝璁╁浘鐗囧湪璺宠垶鏃朵笉鑷充簬璺冲嚭灞忓箷澶栬竟鍘?/span> origs[index*2+1]=verts[index*2+1]=fy+50; index++; } } } @Override protected void onDraw(Canvas canvas) { //杩欎釜鍙屽眰寰幆鏄粠涓婇潰鐩存帴澶嶅埗杩囨潵鐨勶紝鏀逛竴涓嬩腑闂寸殑鍐呭灏辫浜?/span> for (int i = 0; i < HEIGHT + 1; i++) { for (int j = 0; j < WIDTH + 1; j++) { //鎴戜滑鎯冲疄鐜扮殑鏁堟灉鐨勬湰璐ㄦ槸锛歺杞村潗鏍囦笉鍔紝y杞村潗鏍囨寜姝e鸡瑙勫緥鍙樺寲锛屾墍浠ユ垜浠彧闇€瑕佽绠梇杞村亸绉婚噺 //涓嬮潰杩欎釜鍋忕Щ閲忕湅浼煎緢澶嶆潅锛屽叾瀹炲緢绠€鍗曪細 /** * 瑙i噴涓€涓媜ffset: 杩欏叾瀹炴槸涓爣鍑嗙殑姝e鸡琛ㄨ揪寮忥細 Y=A*sin(w*x+&)+h; * 鏄笉鏄緢鐔熸倝锛堟湁涓や釜绗﹀彿涓嶅ソ鎵擄紝鐩存帴鐢ㄥ叾浠栫鍙蜂唬鏇跨殑锛岋紝锛屾€讳箣杩欎笉閲嶈锛?* 鎴戜滑鏉ュ鍙峰叆搴э細 * A=20 * &=k; * h=0; * w=1/WIDTH*2*Math.PI * x=j * 鐒跺悗鎯充竴涓媤涓哄暐鏄?/WIDTH*2*Math.PI锛岃繖涓笉闅惧惂 */ float offSet=(float)Math.sin((float)j/WIDTH*2*Math.PI+k)*20; //鏇存敼Y鍧愭爣锛氬湪鍘熸潵鐨勫熀纭€涓婂姞涓婁竴涓猳ffSet锛?/span> verts[(i*(WIDTH+1)+j)*2+1]=origs[(i*(WIDTH+1)+j)*2+1]+offSet; } } //璁╃浉浣岾閫掑 k+=0.2F; //缁樺浘 canvas.drawBitmapMesh(mBitmap, WIDTH, HEIGHT, verts, 0, null, 0, null); //鍐嶆璋冪敤onDraw()鏂规硶锛屾洿鏂癥鍧愭爣 invalidate(); }}
鑺变簡濂介暱鏃堕棿娉ㄩ噴锛屽簲璇ユ槸璁叉槑鐧戒簡锛屼笉鏄庣櫧鐨勮鐣欒█锛屾垜浼氬強鏃跺洖澶嶇殑銆?/p>
褰撶劧锛屾垜浠疄鐜扮殑鏁堟灉鐭ヨ瘑涓€涓皬渚嬪瓙锛屽笇鏈涙湰鍗氬鑳藉鎶涚爾寮曠帀锛屾垨鑰呰兘缁欎綘浜涜鍚彂锛岀浉淇″姞涓婁綘鑱収鐨勫ぇ鑴戯紝鑲畾鑳界紪鍐欏嚭鏇村姞缁氫附鐨勬晥鏋溿€?/p>
鎶€鏈槸姝荤殑锛屼汉鏄椿鐨勩€傘€?/p>
濂戒簡锛岀粓浜庤缁撴潫浜嗭紝甯屾湜鑳界粰鍚勪綅鏈嬪弸涓€浜涘惎鍙戯紝閭f垜灏遍潪甯搁珮鍏翠簡銆?/p>
鏈€鍚庯紝Demo鍦板潃锛歨ttp://download.csdn.net/detail/nsgsbs/8540553
更多相关文章
- 代码中设置drawableleft
- android 3.0 隐藏 系统标题栏
- Android开发中activity切换动画的实现
- Android(安卓)学习 笔记_05. 文件下载
- Android中直播视频技术探究之—摄像头Camera视频源数据采集解析
- 技术博客汇总
- android 2.3 wifi (一)
- AndRoid Notification的清空和修改
- Android中的Chronometer