如何解决如何在anroid studio java中将位图旋转到onTouchEvent
我正在尝试将我的“播放器”旋转到我在手机上触摸的位置,但它似乎不起作用。 例子
这是我尝试这样做的方法:
public static Bitmap RotateBitmap(Bitmap source,float angle)
{
Matrix matrix = new Matrix();
matrix.postRotate(angle);
return Bitmap.createBitmap(source,source.getWidth(),source.getHeight(),matrix,true);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
int x = (int)event.getX();
int y = (int)event.getY();
int dx = (int)player.x - x;
if(dx<0)
dx*=-1;
int dy = (int)player.y - y;
if(dy<0)
dy*=-1;
double df = dy/dx;
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
if (joystick.ispressed((double) event.getX(),(double) event.getY())){
joystick.setIspressed(true);
}
RotateBitmap(player.getMovement(),(float) Math.todegrees(Math.asin(df)));
return true;
case MotionEvent.ACTION_MOVE:
if (joystick.getIspressed()){
joystick.setActuator((double) event.getX(),(double) event.getY());
}
return true;
case MotionEvent.ACTION_UP:
joystick.setIspressed(false);
joystick.resetActuator();
return true;
}
return super.onTouchEvent(event);
}
这是我的全部代码:
package com.example.myapplication;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.view.MotionEvent;
import android.view.SurfaceView;
public class GameView extends SurfaceView implements Runnable {
public static final double MAX_UPS = 30.0;
private final Joystick joystick = new Joystick(275,700,70,40);;
private Thread thread;
private boolean isPlaying;
private int screenX,screenY;
public static float screenRatioX,screenRatioY;
private Paint paint;
private final Movement player;
//private Movement movement;
private Background background1,background2;
public GameView(Context context,int screenX,int screenY) {
super(context);
this.screenX=screenX;
this.screenY=screenY;
screenRatioX=1920f/screenX;
screenRatioY=1080f/screenY;
background1 = new Background(screenX,screenY,getResources());
background2 = new Background(screenX,getResources());
player = new Movement(screenY,getResources(),getContext(),2*500,500,30);
background2.x=screenX;
paint = new Paint();
}
@Override
public void run() {
while (isPlaying){
update();
draw();
sleep();
}
}
private void update(){
background1.x-=10*screenRatioX;
background2.x-=10*screenRatioX;
if (background1.x + background1.backgorund.getWidth()<0){
background1.x = screenX;
}
if (background2.x + background2.backgorund.getWidth()<0){
background2.x = screenX;
}
joystick.update();
player.update(joystick);
}
private void draw(){
if (getHolder().getSurface().isValid()){
Canvas canvas = getHolder().lockCanvas();
canvas.drawBitmap(background1.backgorund,background1.x,background1.y,paint);
canvas.drawBitmap(background2.backgorund,background2.x,background2.y,paint);
canvas.drawBitmap(player.getMovement(),(int)player.x,(int)player.y,paint);
joystick.draw(canvas);
getHolder().unlockCanvasAndPost(canvas );
}
}
private void sleep(){
try {
Thread.sleep(17);
} catch (InterruptedException e) {
e.printstacktrace();
}
}
public void resume() {
isPlaying = true;
thread = new Thread(this);
thread.start();
}
public void pause(){
try{
isPlaying = false;
thread.join();
} catch (InterruptedException e){
e.printstacktrace();
}
}
public static Bitmap RotateBitmap(Bitmap source,(double) event.getY());
}
return true;
case MotionEvent.ACTION_UP:
joystick.setIspressed(false);
joystick.resetActuator();
return true;
}
return super.onTouchEvent(event);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。