android drawBitmapMesh


package com.example.and6;

import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.widget.ImageView;

public class MeshView  extends ImageView{
	Bitmap bitmap;

	//分割成50*50个格
	int WIDTH=50;
	int HEIGHT=50;
	//依次存放每一个点的 x y坐标
	float[]origs=new float[ ( (WIDTH+1)*(HEIGHT+1)  )*2];
	float[]verts=new float[origs.length];
	
	float k;

	boolean isStart=false;
	public MeshView(Context context) {
		super(context);
		init();
		
	}
	public MeshView(Context context, AttributeSet attrs) {
		super(context, attrs);
		init();
		
	}
	public MeshView(Context context, AttributeSet attrs, int defStyleAttr) {
		super(context, attrs, defStyleAttr);
		init();
		
	}
	@SuppressLint("NewApi")
	public MeshView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
		super(context, attrs, defStyleAttr, defStyleRes);
		init();
		
	}
	@Override
	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);
		flagWave();
		k+=0.1f;
		
		canvas.drawBitmapMesh(bitmap, WIDTH, HEIGHT, verts, 0, null, 0, null);
		if (isStart) {
			invalidate();

		}
				
	}
	
	public void startAnim() {
		isStart=true;
		requestLayout();
	}
	
	public void stopAnim() {
		isStart=false;
	}
	private void init() {
		bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.pic);

		float bitmapHeight=bitmap.getHeight();
		float bitmapWidth=bitmap.getHeight();
		int index=0;
		
		for (int y = 0; y <= HEIGHT; y++) {
			float fy=bitmapHeight*y/HEIGHT;
			for (int x = 0; x <= WIDTH; x++) {
				float fx=bitmapWidth*x/WIDTH;
				
				origs[index*2+0]=verts[index*2+0]=fx;
				origs[index*2+1]=verts[index*2+1]=fy;
				index++;
			}
		}
	}
	private void flagWave() {
		for (int j = 0;j <= HEIGHT; j++) {
			for (int i = 0; i <= WIDTH; i++) {
				verts[ (j*(WIDTH+1)+i )*2+0 ]+=0;
				float offsetY=(float) Math.sin( i*1.0f/WIDTH*2*Math.PI + Math.PI*k);//k 实现周期变化
				
				verts[ (j*(WIDTH+1)+i )*2+1 ]=origs[ ( j*WIDTH+i )*2+1 ]+offsetY*100; //100 振幅
				
			}
		}
	}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值