2015-01-24 3 views
-1

Я перемещаю объект через onTouch в android, но объект выходит из экрана, как я могу его остановить?Остановить перемещение объекта от выхода из экрана в android

case MotionEvent.ACTION_MOVE: 
     DisplayMetrics dm = getResources().getDisplayMetrics(); 
     final int parentHeight = dm.heightPixels; 
     final int parentWidth = dm.widthPixels; 

     RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) this 
       .getLayoutParams(); 
     layoutParams.leftMargin = Math.min(Math.max(0, (x - m_X)), 
       parentWidth - this.getWidth()); 
     layoutParams.topMargin = Math.min(Math.max(0, (y - m_Y)), 
       parentHeight - this.getHeight()); 
     layoutParams.rightMargin = Math.min(Math.max(0, (x - m_W)), 
       parentWidth - this.getWidth()); 
     layoutParams.bottomMargin = Math.min(Math.max(0, (y - m_Z)), 
       parentHeight + this.getHeight()); 
     this.setLayoutParams(layoutParams); 

contructors являются:

public FTFLImageView(Context context) { 
     super(context); 
     init(); 
    } 

    public FTFLImageView(Context context, AttributeSet attrs) { 
     super(context, attrs, 0); 
    } 

    private void init() { 
     // TODO Auto-generated method stub 
     RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(
       150, 150); 
     this.setImageResource(R.drawable.ic_launcher); 
     this.setLayoutParams(layoutParams); 

    } 

и класс начинается как:

public class FTFLImageView extends ImageView implements OnTouchListener{ 

ответ

0

Просто используйте основные математике.

Максимальное левое поле - ширина контейнера родителя минус ширина просматриваемого вами вида - и, конечно, больше нуля.

Максимальное верхнее поле - высота контейнера родителя минус высота просматриваемого вами вида - и, конечно, больше нуля.

Вот пример, я использую весь размер экрана в качестве размера родительского контейнера, адаптирую его в соответствии с вашими потребностями.

// using display size here, it's better to use the parent container's dimensions! 
DisplayMetrics dm = getResources().getDisplayMetrics(); 

final int parentHeight = dm.heightPixels; 
final int parentWidth = dm.widthPixels; 

... 

case MotionEvent.ACTION_MOVE: 
      RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams)v.getLayoutParams(); 
      layoutParams.leftMargin = Math.min(Math.max(0, (x - m_X)), parentWidth-v.getWidth()); 
      layoutParams.topMargin = Math.min(Math.max(0, (y - m_Y)), parentHeight-v.getHeight()) 
      v.setLayoutParams(layoutParams); 
      Toast.makeText(context,"X="+x+"Y="+y, 5000).show(); 
      break; 
+0

Что должно быть в методе getResources()? – najmulhasan

+0

Каждый вид в Android имеет метод 'getResources()' по умолчанию .... Является ли ваш код внутри класса View? – sled

+0

, пожалуйста, продлите код, отредактировав свой вопрос. У вашего класса уже есть метод 'getResources()', так как это представление. – sled

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