Android编程实现扭曲图像的绘制功能示例编程实现扭曲图像的绘制功能示例
主要介绍了Android编程实现扭曲图像的绘制功能,结合实例形式较为详细的分析了Android图形扭曲的具体操作
步骤与相关实现技巧,需要的朋友可以参考下
本文实例讲述了Android编程实现扭曲图像的绘制功能。分享给大家供大家参考,具体如下:
为了实现动画效果,使用drawBitmapMess方法对图像进行扭曲,使用定时器以100毫秒的频率按圆形轨迹扭曲图像。
扭曲的关键是生成verts数组。本例一开始会先生成verts数组的初始值:有一定水平和垂直间距的网点坐标。然后通过warp方
法按一定的数学方法变化verts数组中的坐标。关键部分的代码如下:
定义基本变量:MyView是用于显示扭曲的图像的自定义view,angle是圆形轨迹的当前角度:
private static Bitmap bitmap;
private MyView myView;
private int angle = 0; // 圆形轨迹当前的角度
private Handler handler = new Handler()
{
public void handleMessage(Message msg)
{
switch (msg.what)
{
case 1:
Random random = new Random();
// 计算图形中心点坐标
int centerX = bitmap.getWidth() / 2;
int centerY = bitmap.getHeight() / 2;
double radian = Math.toRadians((double) angle);
// 通过圆心坐标、半径和当前角度计算当前圆周的某点横坐标
int currentX = (int) (centerX + 100 * Math.cos(radian));
// 通过圆心坐标、半径和当前角度计算当前圆周的某点纵坐标
int currentY = (int) (centerY + 100 * Math.sin(radian));
// 重绘View,并在圆周的某一点扭曲图像
myView.mess(currentX, currentY);
angle += 2;
if (angle > 360)
angle = 0;
break;
}
super.handleMessage(msg);
}
};
private TimerTask timerTask = new TimerTask()
{
public void run()
{
Message message = new Message();
message.what = 1;
handler.sendMessage(message);
}
以下是自定义view,MyView的具体内容:
private static class MyView extends View
{
private static final int WIDTH = 20;
private static final int HEIGHT = 20;
private static final int COUNT = (WIDTH + 1) * (HEIGHT + 1);
private final float[] verts = new float[COUNT * 2];
private final float[] orig = new float[COUNT * 2];
private final Matrix matrix = new Matrix();
private final Matrix m = new Matrix();
// 设置verts数组的值
private static void setXY(float[] array, int index, float x, float y)
{
array[index * 2 + 0] = x;
array[index * 2 + 1] = y;
}
public MyView(Context context)
{
super(context);
setFocusable(true);
bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.image);
float w = bitmap.getWidth();
float h = bitmap.getHeight();
int index = 0;
评论0
最新资源