onTouchEvent

Diskussion i 'Frågor, support och diskussion' startad av frozendragon, 12 maj 2011.

  1. frozendragon

    frozendragon Infant Droid Medlem

    Blev medlem:
    6 februari 2011
    Inlägg:
    9
    Mottagna gillanden:
    0

    MINA ENHETER

    Jag håller på att göra ett spel till Android, har fastnat på ett problem och inte riktigt vet hur jag ska lösa det. När jag drar fingret över skärmen är det mening att backgrunden ska röra sig efter fingret men istället så väntar det på att jag ska släppa fingret innan det uppdaterar eller ibland när jag drar i några sekunder så uppdatera den och struntar i att jag fortfarande dra på skärmen.

    Hur som helst förstår jag inte varför den uppträder så här lite hjälp skulle uppskattas. (BackgroundLeft, BackgroundUp är koordinater för bakgrunden.)
    Kod:
        public boolean onTouchEvent (MotionEvent event)
        {
        	TouchCordX = event.getX();
        	TouchCordY = event.getY();
        	FixValueX = 0;
        	FixValueY = 0;
        	
        	int action = event.getAction();
        	   switch (action) { 
        	      case (MotionEvent.ACTION_DOWN) : // Touch screen pressed
        	    	  BackgroundLeft += TouchCordX - oldTouchCordX;
    	    	      BackgroundUp += TouchCordY - oldTouchCordY;
        	      case (MotionEvent.ACTION_UP) : // Touch screen touch ended
        	    	  
        	      case (MotionEvent.ACTION_MOVE) : // Contact has moved across screen
        	      {
        	    	  
        	      }
        	      case (MotionEvent.ACTION_CANCEL) : // Touch event cancelled
        	    	  
        	   }
        	oldTouchCordX = TouchCordX;
        	oldTouchCordY = TouchCordY;
        	return true;
        }
     
  2. ozp

    ozp Teen Droid Medlem

    Blev medlem:
    6 maj 2010
    Inlägg:
    250
    Mottagna gillanden:
    31

    MINA ENHETER

    Koden visar inte hur du uppdaterar positionen på bakgrunden.

    Jag gissar att koordinaterna lagras i BackgroundLeft och BackgroundUp. De uppdateras när du får en ACTION_DOWN, alltså när du först tar fingret på skärmen. Vid ACTION_MOVE, när du rör fingret, uppdateras inte koordinaterna.
     
  3. frozendragon

    frozendragon Infant Droid Medlem

    Blev medlem:
    6 februari 2011
    Inlägg:
    9
    Mottagna gillanden:
    0

    MINA ENHETER

    Här är större delen av min kod, så vit jag vet är det inget problem när jag ritar upp backgrunden.
    Kod:
    	private Panel main;
    	
    	public boolean start = true;
    	private volatile boolean running = true;
    	private float Scale = 0.5f;
    	private int BackgroundLeft = 0;
    	private int BackgroundUp = 0;
    	int width;
    	int height;
    	float TouchCordX;
    	float TouchCordY;
    	//Previous touch screen pointers position.
    	float oldTouchCordX;
    	float oldTouchCordY;
    	
    	float FixValueX;
    	float FixValueY;
    
        @Override
        public void onCreate(Bundle savedInstanceState) 
        {
            super.onCreate(savedInstanceState);  
         
            main = new Panel(this);
            DisplayMetrics metrics = new DisplayMetrics();
            getWindowManager().getDefaultDisplay().getMetrics(metrics);
            //px = dp * (dpi / 160)
            //dp is always 1.5.
            width = (int) (4 *(metrics.density * (metrics.xdpi)));
            height = (int) (4 *(metrics.density * (metrics.ydpi)));
            setContentView(main,new ViewGroup.LayoutParams(320,480));
            
            (new Thread(new AnimationLoop())).start();
        }
        private void DrawBackground(Canvas canvas, int ImageId) { 	
        	canvas.save();
        	//Preparing to scale the image to the right size.
        	//canvas.scale(Scale, Scale);
        	//getting the image from the file.
        	Bitmap bmp = BitmapFactory.decodeResource(getResources(), ImageId);
        	canvas.drawColor(Color.TRANSPARENT);
        	Rect src = new Rect(BackgroundLeft, BackgroundUp, BackgroundLeft + width, BackgroundUp + height);
        	//increase width and height here to zoom in or opposite to zoom out.
        	Rect dst = new Rect(0, 0, width, height);
        	//drawing the image. Parameter 2 and 3 are the image position on the screen, it is not the same as the canvas position on the screen.
        	canvas.drawBitmap(bmp, src, dst, null);
        	canvas.restore();
        	DrawText(canvas, String.valueOf(dst.bottom), 250, 180);
        	DrawText(canvas, String.valueOf(dst.right), 250, 200);
    	}
        private synchronized void doDraw(Canvas canvas, Paint paint)
        {
        	DrawBackground(canvas, R.drawable.map);
        }
        class Panel extends View
        {
        	Paint paint;
        	
        	public Panel(Context context)
        	{
        		super(context);
        		paint = new Paint();
        	}
        	
        	@Override
        	protected void onDraw(Canvas canvas)
        	{
        		doDraw(canvas,paint);
        	}
        }
        
        class AnimationLoop implements Runnable
        {
        	public void run()
        	{
        		while(running)
        		{    	    				
        			try
        			{
        				Thread.sleep(30);
        			}
        			catch(InterruptedException ex) {}
        			{
        				//make the object move around.
        				updatePhysics();
        				main.postInvalidate();
        			}
        		}
        	}    
        }