zoukankan      html  css  js  c++  java
  • Android实现能够揉动的图片

    public class Demo01 extends Activity{
    	private Bitmap bitmap = null;
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(new MyView(this, R.drawable.background));
    	}
    	
    	private class MyView extends View{
    		private final int  WIDTH = 20;
    		private final int  HEIGHT = 20;
    		private final int COUNT = (WIDTH+1)*(HEIGHT+1);
    		private final float[] verts = new float[COUNT*2];
    		private final float[]  orgs = new float[COUNT*2];
    		public MyView(Context context,int drawableId) {
    			super(context);
    			setFocusable(true);
    			bitmap = BitmapFactory.decodeResource(getResources(), drawableId);
    			float bitmapWidth = bitmap.getWidth();
    			float bitmapHeight = bitmap.getHeight();
    			int index = 0;
    			for(int y=0;y<=HEIGHT;y++){
    				float fy = bitmapHeight / WIDTH * y;
    				for(int x = 0;x<=WIDTH;x++){
    					float fx = bitmapWidth / HEIGHT * x;
    					verts[index*2 + 0 ] = orgs[index*2 + 0] = fx;
    					verts[index*2 + 1 ] = orgs[index*2 + 1] = fy;
    					index ++;
    				}
    			}
    			setBackgroundColor(Color.WHITE);
    		}
    		
    		@Override
    		protected void onDraw(Canvas canvas) {
    			super.onDraw(canvas);
    			canvas.drawBitmapMesh(bitmap, WIDTH, HEIGHT, verts, 0, null, 0, null);
    		}
    		
    		private void warp(float fx , float fy){
    			for(int i=0;i<COUNT*2;i+=2){
    				float dx = fx - orgs[i+0];
    				float dy = fy - orgs[i+1];
    				float dd = dx*dx + dy*dy;
    				float d = (float) Math.sqrt(dd);
    				float pull = 80000 / (float)(dd*d);
    				if(pull > 1){
    					verts[i+0] = fx;
    					verts[i+1] = fy;
    				}else{
    					verts[i+0] = orgs[i+0] + dx*pull;
    					verts[i+1] = orgs[i+1] + dy*pull;
    				}
    			}
    			invalidate();
    		}
    		
    		@Override
    		public boolean onTouchEvent(MotionEvent event) {
    			warp(event.getX(),event.getY());
    			return true;
    		}
    	}
    }

  • 相关阅读:
    jquery json 格式教程
    不修改代码就能优化ASP.NET网站性能的一些方法
    C#操作sqlite数据库使用SQLiteParameter传递参数
    60个开发者不容错过的免费资源库
    Java 与 .NET 的平台发展之争
    “一次编写,随处运行” Intel HTML5技术研讨会
    Struts2 高危漏洞修复方案 (S2-016/S2-017)
    AspNetPager 控件使用
    jQueryUI常用功能实战
    验证码生成类
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/7010109.html
Copyright © 2011-2022 走看看