您的位置:首页 > 移动开发 > Android开发

图片随手势运动

2015-09-01 09:18 549 查看
package com.example.rotate;

import java.security.PublicKey;

import android.R.integer;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.PaintFlagsDrawFilter;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.ImageView;

public class RotateView extends ImageView {
float x1;
float y1;
float a;
float b;
float d1;
float d2;
double ab;
double ac;
double bc;
int left;
int bot;
float degree=0;
double cos;
double jiaodu;
Matrix matrix;
Bitmap bitmap;
float degreecontainer;
public RotateView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
matrix=new Matrix();
}
public RotateView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
matrix=new Matrix();
}
public RotateView(Context context) {
super(context);

// TODO Auto-generated constructor stub
matrix=new Matrix();
}
public void getfloat(int left,int down){
this.left=left;
this.bot=down;
}
@Override
public void setImageBitmap(Bitmap bm) {
// TODO Auto-generated method stub
this.bitmap=bm;
}
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
canvas.setDrawFilter(new PaintFlagsDrawFilter(0,Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG));
canvas.save();
canvas.drawBitmap(bitmap, matrix, null);
canvas.restore();
}
//监听函数
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
switch (event.getAction()&MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
x1=event.getX();
y1=event.getY();
break;

case MotionEvent.ACTION_MOVE:
a=event.getX();
b=event.getY();
if (a<x1) {
ab=Math.sqrt(Double.parseDouble(String.valueOf((x1-left)*(x1-left)+(y1-bot)*(y1-bot))));
ac=Math.sqrt(Double.parseDouble(String.valueOf((a-left)*(a-left)+(b-bot)*(b-bot))));
bc=Math.sqrt(Double.parseDouble(String.valueOf((a-x1)*(a-x1)+(b-y1)*(b-y1))));
cos=((ab*ab)+(ac*ac)-(bc*bc))/(2*ab*ac);
jiaodu=Math.acos(cos)*180/Math.PI;
//	matrix.preRotate(degree, left, bot);
degree=-Float.parseFloat(String.valueOf(jiaodu));
//	degreecontainer=degree;
//	degree=-Float.parseFloat(String.valueOf(jiaodu));

matrix.reset();
//matrix是以当前状态为基础进行数据更新,如果不reset就会产生无数次叠加
matrix.postRotate(degree, left, bot);

invalidate();
}

break;

case MotionEvent.ACTION_UP:
break;
}

return true;
}
public float getdegree(MotionEvent event){
double delta_x = (event.getX(0) - event.getX(1));
double delta_y = (event.getY(0) - event.getY(1));
double radians = Math.atan2(delta_y, delta_x);
return (float) Math.toDegrees(radians);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息