一个随手指滑动转动图片的例子

本文介绍了一个自定义Android视图,通过触碰事件、Matrix和Bitmap实现图片随手指滑动旋转的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主要是手指滑动时,图片随着滑动而转圈。运用了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)) ;
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值