主要是手指滑动时,图片随着滑动而转圈。运用了Android中的touch事件还有Matrix和Bitmap,废话不多说,上源码:
自定义VIew:
public class RotateView extends View {
Bitmap bitmap;
Matrix matrix ;
int width , height ;
int degrees ;
Paint mPaint ;
public DrawThread thread ;
private int startX ,startY ;
public RotateView(Context context) {
super(context);
Drawable drawable = this.getResources().getDrawable(
R.drawable.circle_red);
BitmapDrawable drawable2 = (BitmapDrawable) drawable ;
bitmap = drawable2.getBitmap() ;
matrix = new Matrix() ;
width = bitmap.getWidth() ;
height = bitmap.getHeight() ;
mPaint = new Paint() ;
mPaint.setDither(true) ;
mPaint.setAntiAlias(true) ;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
matrix.setTranslate(width / 2, height / 2) ; //设置转轴位置
matrix.preRotate(degrees) ; //开始转
matrix.preTranslate(- width / 2 , - height / 2 ) ; //转轴还原
canvas.drawBitmap(bitmap, matrix, mPaint) ;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
startX = (int) event.getX() ;
startY = (int) event.getY() ;
Log.i("TAG", "startX: "+ startX+",startY: " + startY) ;
} else if (event.getAction() == MotionEvent.ACTION_MOVE) {
int moveX = (int) (event.getX() - startX) ;
Log.i("TAG", "moveX: "+ moveX) ;
if (moveX > 50) {
degrees += 50 ;
invalidate() ;
Log.i("TAG", "Right") ;
} else if (moveX < 0) {
degrees -= 50 ;
invalidate() ;
Log.i("TAG", "Left") ;
}
} else if (event.getAction() == MotionEvent.ACTION_UP) {
Log.i("TAG", "up........") ;
}
return true ; //告诉Android将move、up事件发送到此方法。
}
}
主Avtivity:
public class TestRotateActivity extends Activity {
private RotateView rotateView ;
private Button btStart , btStop ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new RotateView(this)) ;
}
}