Wie kann ich ein Bild von Links nach rechts und von rechts nach Links in android?

Ich bin neu in android. Ich will ein Bild von Links nach rechts und von rechts nach Links.Wenn der Benutzer berühren Sie rechten Seite ein Bild von dem Bild, das Sie bewegen wird, mit der rechten Seite.Dasselbe wird passieren, wenn der Benutzer berühren rechten Seite des Bildes.Aber Bild wird sich verschieben, vorgeben Stelle über der x-Achse.

Beispiel: Bild verschieben p1(100,100), p2(150,100), p3(200,100), p4(250,100) über diese Punkte der Reihe nach ab. Wenn der Benutzer berühren linken Seite des p1, bleibt die aktuelle position.Dasselbe wird erfolgt auf p4. Ich kann das Bild bewegen von p1 nach p2 und p2 nach p1. wenn ich p3 und p4 funktioniert es nicht wie ich erwartet habe.

Hier ist meine GameView Klasse.

public class GameView extends SurfaceView{
    private Bitmap BG_image;
    private SurfaceHolder holder;
    //private GameLoopThread gameLoopThread;    
    int x;
    int y;
    private int srcX=100;
    private int srcY=100;
    int replaceX=0,areaThreshold=50;
    int distance=50;

    public GameView(Context context) {

        super(context);
        //gameLoopThread = new GameLoopThread(this);
        holder = getHolder();
        holder.addCallback(new SurfaceHolder.Callback() {

            @Override
            public void surfaceDestroyed(SurfaceHolder holder) {

/*              boolean retry = true;
                gameLoopThread.setRunning(false);

                while (retry) {

                    try {

                        gameLoopThread.join();
                        retry = false;

                    } catch (InterruptedException e) {

                    }
                }*/
            }

            @Override
            public void surfaceCreated(SurfaceHolder holder) {

/*              gameLoopThread.setRunning(true);
                gameLoopThread.start();*/
                Canvas c = holder.lockCanvas(null);
                onDraw(c);
                holder.unlockCanvasAndPost(c);
            }

            @Override
            public void surfaceChanged(SurfaceHolder holder, int format,

                    int width, int height) {
            }
        });
        BG_image = BitmapFactory.decodeResource(getResources(), R.drawable.icon);
        Bitmap.createScaledBitmap(BG_image, BG_image.getWidth(), BG_image.getHeight(), false);
    }
    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        //TODO Auto-generated method stub
               //x = (int) ev.getX();
               //y = (int) ev.getY();
                updateX(srcX);
                replaceX=(int)ev.getX();
                int StartX=0, EndX=0;
                StartX=replaceX-areaThreshold;
                EndX=replaceX+areaThreshold;
                if(StartX<=100){
                    SurfaceHolder holder=getHolder();
                    Canvas myCanvas=holder.lockCanvas(null);
                    onDraw(myCanvas);
                    holder.unlockCanvasAndPost(myCanvas);
                    srcX=100;
                }
                else if(StartX>100 && StartX<250){
                    SurfaceHolder holder=getHolder();
                    Canvas myCanvas=holder.lockCanvas(null);
                    onDraw(myCanvas);
                    holder.unlockCanvasAndPost(myCanvas);
                    srcX=srcX+distance;
                }
                if(EndX>100 && EndX<250){
                    SurfaceHolder holder=getHolder();
                    Canvas myCanvas=holder.lockCanvas(null);
                    onDraw(myCanvas);
                    holder.unlockCanvasAndPost(myCanvas);
                    srcX=srcX-distance;
                }
                else if(EndX>250){
                    SurfaceHolder holder=getHolder();
                    Canvas myCanvas=holder.lockCanvas(null);
                    onDraw(myCanvas);
                    holder.unlockCanvasAndPost(myCanvas);
                    srcX=250;
                }

        return super.onTouchEvent(ev);
    }
    @Override
    protected void onDraw(Canvas canvas) {
        //TODO Auto-generated method stub  
        updateX(srcX);
        Paint paint = new Paint();
        canvas.drawColor(Color.BLACK);
        canvas.drawRect(new Rect(0,0,getWidth(),getHeight()),paint);
        canvas.drawBitmap(BG_image, srcX, srcY, null);
    }

    private int updateX(int srcX){
        this.srcX =srcX;
        return srcX ;

    }
}

Lesen Sie bitte meinen code an und geben Ihre wertvolle Ratschläge um mein problem zu lösen.
Hoffentlich bekomme ich eine baldige Antwort!

  • Dein code ist unkommentiert und verwirrend, und deine Erklärung hat logische Fehler. Sie können tun besser.
  • Stimme mit Aku. Auch sollte man sich nicht aufrufen onDraw direkt, sollten Sie nur die Einstellung der srcX Wert und Aufruf invalidate, die dem system mitteilt, um einen Anruf zu planen, um onDraw. Und die updateX Methode nicht scheinen, um zu dienen jedem Zweck. Ich denke, Sie beseitigen können über die Hälfte der code hier.
Schreibe einen Kommentar