濂藉惂锛屽叧浜嶢ndroid涓浘鍍忓鐞嗙殑鏈€鍚庝竴涓井鍗氾紝淇濊瘉鏄渶鍚庝竴涓簡锛屽笇鏈涙偿钀屼笉瑕侀獋鎴戙€傘€傘€?/p>

浠婂ぉ鎯冲疄鐜扮殑鏁堟灉鏄細缁堟瀬澶ф嫑锛氬埄鐢˙itmapMesh鏉ュ疄鐜颁竴浜涚壒鏁堛€?
褰撶劧锛孊itmapMesh鍔熻兘鍗佸垎寮哄ぇ锛屾墦寮€澶у鐨勮剳娲烇紝鐩镐俊澶у浼氳璁″嚭鏇寸偒涓界殑鐗规晥锛?/p>

鍜屽線甯镐竴鏍凤紝棣栧厛锛屼笂鏁堟灉鍥撅紝鍗栦釜钀岋細
Android鍥惧儚澶勭悊鎶€鏈紙瀹炵幇Android涓殑PS锛夛紙鍏級_绗?寮犲浘鐗? title=
鎬庝箞鏍凤紝鏅€氱殑涓€寮犲浘鎸夋寮︽洸绾胯烦璧疯垶鏉ヤ簡銆傘€傘€?/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

更多相关文章

  1. 代码中设置drawableleft
  2. android 3.0 隐藏 系统标题栏
  3. Android开发中activity切换动画的实现
  4. Android(安卓)学习 笔记_05. 文件下载
  5. Android中直播视频技术探究之—摄像头Camera视频源数据采集解析
  6. 技术博客汇总
  7. android 2.3 wifi (一)
  8. AndRoid Notification的清空和修改
  9. Android中的Chronometer

随机推荐

  1. Android EditText inputType与numeric属
  2. Android Handler 机制详解
  3. 我的android开发之路
  4. 【边做项目边学Android】知识点:Adapter适
  5. [Android L]SEAndroid增强Androd安全性背
  6. android jni 理解
  7. HOWTO install and setup Android NDK fo
  8. android中使用线程池和临时缓存优化网络
  9. android 中 Error:Could not find suppor
  10. [Android]获取未安装的APK图标