2016-07-14 11 views
0

Я реализовал функцию масштабирования и перетаскивания, которая отлично работает, между тем я столкнулся с проблемой, что, как только заканчивается перетаскивание, изображения возвращаются в правый нижний угол. Ниже приведен код, который я использую для перетаскивания. Можете ли вы посоветовать мне, как контролировать/запоминать мою последнюю затащенную позицию.Изображения теряют свою позицию в Рамочной/Относительной компоновке после того, как пользователь закончил перетаскивание

frameLayout = (FrameLayout) findViewById(R.id.relativeLayout); 
    frameLayout.setDrawingCacheEnabled(true); 
    frameLayout.buildDrawingCache(); 
    bm = Bitmap.createBitmap(500, 500, Bitmap.Config.ARGB_8888); 
    Canvas c = new Canvas(bm); 
    frameLayout.draw(c); 
    frameLayout.setOnTouchListener(this);` 

    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
    int x = (int) event.getX(); 
    int y = (int) event.getY(); 
    if (x < 0) { 

     img_must_cities.setX(0); 
     img_must_cities.setY(y); 
     img_road_names.setX(0); 
     img_road_names.setY(y); 

     x = 0; 

     Toast.makeText(getApplicationContext(), "x=0", Toast.LENGTH_SHORT).show(); 
    } 
    if (y < 0) { 

     img_must_cities.setY(0); 
     img_must_cities.setX(x); 
     img_road_names.setY(0); 
     img_road_names.setX(x); 

     y = 0; 
     Toast.makeText(getApplicationContext(), "y=0", Toast.LENGTH_SHORT).show(); 
    } 
    if (x > bm.getWidth()) { 
     x = bm.getWidth() - 20; 
     img_must_cities.setX(x); 
     img_must_cities.setY(y); 
     img_road_names.setX(x); 
     img_road_names.setY(y); 
     Toast.makeText(getApplicationContext(), "x=bitmap.maxwidth(}", Toast.LENGTH_SHORT).show(); 
    } 
    if (y > bm.getHeight()) { 
     y = bm.getHeight() - 20; 
     img_must_cities.setX(x); 
     img_must_cities.setY(y); 
     img_road_names.setX(x); 
     img_road_names.setY(y); 
     Toast.makeText(getApplicationContext(), "y=bitmap.maxheight(}", Toast.LENGTH_SHORT).show(); 
    } 
    if (x > 0 && x < bm.getWidth() && y > 0 && y < bm.getHeight()) { 
     int action = event.getAction(); 
     int pixel = bm.getPixel((int) x, (int) y); 

     switch (action & MotionEvent.ACTION_MASK) { 
      case MotionEvent.ACTION_DOWN: { 
       Log.e("COORDINATES", "Touch coordinates : x" + String.valueOf(x) + "y" + String.valueOf(y)); 

       img_must_cities.setX(x); 
       img_must_cities.setY(y); 
       img_road_names.setX(x); 
       img_road_names.setY(y); 
       inRed = Color.red(pixel); 
       inBlue = Color.blue(pixel); 
       inGreen = Color.green(pixel); 
       Log.e("Colors", "R:" + inRed + " G:" + inGreen + " B:" + inBlue); 
       break; 
      } 
      case MotionEvent.ACTION_MOVE: { 
       Log.e("COORDINATES", "Touch coordinates : x" + String.valueOf(x) + "y" + String.valueOf(y)); 
       img_must_cities.setX(x); 
       img_must_cities.setY(y); 
       img_road_names.setX(x); 
       img_road_names.setY(y); 
       inRed = Color.red(pixel); 
       inBlue = Color.blue(pixel); 
       inGreen = Color.green(pixel); 
       Log.e("Colors", "R:" + inRed + " G:" + inGreen + " B:" + inBlue); 
       break; 
      } 
     } 
    } 
    if (x < 0 && x < bm.getWidth() && y < 0 && y < bm.getHeight()) { 
     int action = event.getAction(); 
     int pixel = bm.getPixel((int) x, (int) y); 

     switch (action & MotionEvent.ACTION_MASK) { 
      case MotionEvent.ACTION_DOWN: { 
       Log.e("COORDINATES", "Touch coordinates : x" + String.valueOf(x) + "y" + String.valueOf(y)); 

       img_must_cities.setX(x); 
       img_must_cities.setY(y); 
       img_road_names.setX(x); 
       img_road_names.setY(y); 
       inRed = Color.red(pixel); 
       inBlue = Color.blue(pixel); 
       inGreen = Color.green(pixel); 
       Log.e("Colors", "R:" + inRed + " G:" + inGreen + " B:" + inBlue); 
       break; 
      } 
      case MotionEvent.ACTION_MOVE: { 
       Log.e("COORDINATES", "Touch coordinates : x" + String.valueOf(x) + "y" + String.valueOf(y)); 

       img_must_cities.setX(x); 
       img_must_cities.setY(y); 
       img_road_names.setX(x); 
       img_road_names.setY(y); 
       inRed = Color.red(pixel); 
       inBlue = Color.blue(pixel); 
       inGreen = Color.green(pixel); 
       Log.e("Colors", "R:" + inRed + " G:" + inGreen + " B:" + inBlue); 
       break; 
      } 
     } 

    } 
    return false; 
} 
+0

Для «последней позиции» вы значите, когда падение пользователя изображения? –

+0

@ Эрик Минарини, да, когда пользователь бросает изображение, он должен оставаться в том самом месте. Но в моем случае это как-то возвращается в правый нижний угол. – Umair

ответ

2

Может быть, вы можете попробовать, что:

вначале сохранить й и у, если обнаружить ACTION_DROP события использовать getX() и getY(), если вы хотите их войти, а затем установить й и у к начальные значения.

Здесь вы можете найти в документацию по событиям: https://developer.android.com/guide/topics/ui/drag-drop.html

 Смежные вопросы

  • Нет связанных вопросов^_^