2015-01-12 7 views
0

У меня есть этот код здесь, который я написал, что должно позволить вам перемещать объекты по экрану.Recycle view in scroll view for android

У меня, кажется, возникают проблемы с этим, так как объект будет двигаться, но не smotly, он прыгает, когда вы держите палец вниз.

помогите пожалуйста.

VVVVVVVVVVVVV КОД VVVVVVVVVVVVV

package com.example.alex.alexstouch; 

import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.MotionEvent; 
import android.view.View; 
import android.widget.TextView; 


public class MainActivity extends Activity { 

    TextView touchMove; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     touchMove = (TextView)findViewById(R.id.pike); 
     touchMove.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 

       switch (event.getAction()) { 

        case MotionEvent.ACTION_MOVE: 
         touchMove.setTranslationX(event.getX()); 
         touchMove.setTranslationY(event.getY()); 
         break; 

        case MotionEvent.ACTION_DOWN: 
         Log.d("pike pike", "broken"); 
         break; 



       } 

       return true; 
      } 
     }); 
    } 

} 

ответ

0

Если вы хотите переместить какой-либо объект на экране, например, кнопки перетащить-н-падение, вы должны сделать макет корневой - Относительный макета и изменения объектов поля в коде (при вызове callbackback).
Вы можете изменить поля используется layoutParams как этот

RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) view.getLayoutParams(); 
layoutParams.rightMargin = layoutParams.rightMargin + x 
layoutParams.bottomMargin = layoutParams.bottomMargin + y; 
view.setLayoutParams(layoutParams); 

Мой код кнопки плавающей (которые могут быть перемещены с помощью длинного крана)

private class PlusButtonTouchListener implements View.OnTouchListener { 
    private final int MIN_X = 0; 
    private final int MIN_Y = 0; 
    private float startX; 
    private float startY; 
    private int MAX_X; 
    private int MAX_Y; 

    @Override 
    public boolean onTouch(View view, MotionEvent event) { 

     switch (event.getAction() & MotionEvent.ACTION_MASK) { 
      case MotionEvent.ACTION_DOWN: 
       startX = event.getX(); 
       startY = event.getY(); 

       MAX_X = ((View) mPlusButton.getParent()).getWidth() - mPlusButton.getWidth(); 
       MAX_Y = ((View) mPlusButton.getParent()).getHeight() - mPlusButton.getHeight(); 

       mPlusButton.setAlpha(0.7f); 
       break; 
      case MotionEvent.ACTION_UP: 
       mPlusButton.setAlpha(1f); 
       savePlusButtonCoordinates(); 
       isMoved = false; 
       break; 
      case MotionEvent.ACTION_MOVE: 
       if (isMoved) { 
        float deltaX = startX - event.getX(); 
        float deltaY = startY - event.getY(); 
        RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) view.getLayoutParams(); 
        layoutParams.rightMargin = layoutParams.rightMargin + (int) deltaX; 
        layoutParams.bottomMargin = layoutParams.bottomMargin + (int) deltaY; 

        if (layoutParams.rightMargin > MAX_X) { 
         layoutParams.rightMargin = MAX_X; 
        } else if (layoutParams.rightMargin < MIN_X) { 
         layoutParams.rightMargin = MIN_X; 
        } 
        if (layoutParams.bottomMargin > MAX_Y) { 
         layoutParams.bottomMargin = MAX_Y; 
        } else if (layoutParams.bottomMargin < MIN_Y) { 
         layoutParams.bottomMargin = MIN_Y; 
        } 

        view.setLayoutParams(layoutParams); 
       } 
       break; 
     } 
     mPlusButton.invalidate(); 
     return false; 
    } 
}