图片随手势运动
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); } }
相关文章推荐
- android控件开源项目
- 常用的android开发框架有哪些
- Android的列表布局
- android学习笔记
- android 读取doc docx xsl xslx
- Android fill_parent、wrap_content和match_parent的区别
- Android应用程序的Activity启动过程
- 解读Android之Intents和Intent Filters
- fragment
- [android]service中再启service
- android Matrix.setRotate 和 postRotate的区别
- Android自学笔记之Intent 页面跳转详解
- Android自学笔记之 Android五大布局之线性布局的功能、常用属性、用法
- Android自学笔记之Spinner下拉框的功能、使用
- Android ORM DB使用心得
- Android NDK开发(八)——应用监听自身卸载,弹出用户反馈调查
- Android系统缓存相关
- android studio下的NDK开发详解(一)
- Android简单自定义标题栏
- android SDK manager 无法获取更新版本列表