微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在anroid studio java中将位图旋转到onTouchEvent

如何解决如何在anroid studio java中将位图旋转到onTouchEvent

我正在尝试将我的“播放器”旋转到我在手机上触摸的位置,但它似乎不起作用。 例子

enter image description here

这是我尝试这样做的方法

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 举报,一经查实,本站将立刻删除。