2017-02-13 44 views
0

我想移动TextView上的ImageView,但即使使用Google Developer页面中的代码,我也无法移动它。 如何在Android的屏幕的任意位置拖放TextView将TextView拖放到任意位置

+4

添加您已经尝试过的代码 - 如果在尝试移动TextView时出现错误,请在您的问题中包括这些以使社区能够提供帮助;查看[快速浏览StackOverflow](http://stackoverflow.com/help)以获取有关询问优秀问题的提示等。 – ishmaelMakitla

+1

Google Developer Page上的代码正常工作...我们提供帮助的唯一方法是看到你的代码,并解释你在做什么不同的工作 – Entreco

+0

没有它的不工作..它包含错误 –

回答

0

XML文件:

<?xml version="1.0" encoding="utf-8"?> 
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/linear" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 

    <TextView 
      android:id="@+id/tv1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:padding="10dp" 
      android:text="Test1" /> 


     <TextView 
      android:id="@+id/tv2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:padding="10dp" 
      android:text="Test2" /> 
    </RelativeLayout> 

的Java文件

public class TestActivity extends Activity { 

     int pressed_x,pressed_y,pressed_x1,pressed_y1; 
     TextView tv1,tv2; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_test); 

      tv1 = (TextView) findViewById(R.id.tv1); 
      tv2 = (TextView) findViewById(R.id.tv2); 

      tv1.setOnTouchListener(mOnTouchListenerTv1); 
      tv2.setOnTouchListener(mOnTouchListenerTv2); 
     } 

     public final View.OnTouchListener mOnTouchListenerTv1 = new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       RelativeLayout.LayoutParams relativeLayoutParams = (RelativeLayout.LayoutParams) tv1.getLayoutParams(); 


       switch (event.getActionMasked()) { 
        case MotionEvent.ACTION_DOWN: 
         Log.d("TAG","@@@@ TV1 ACTION_UP"); 
         // Where the user started the drag 
         pressed_x = (int) event.getRawX(); 
         pressed_y = (int) event.getRawY(); 
         break; 

        case MotionEvent.ACTION_MOVE: 
         Log.d("TAG","@@@@ TV1 ACTION_UP"); 
         // Where the user's finger is during the drag 
         final int x = (int) event.getRawX(); 
         final int y = (int) event.getRawY(); 

         // Calculate change in x and change in y 
         int dx = x - pressed_x; 
         int dy = y - pressed_y; 

         // Update the margins 
         relativeLayoutParams.leftMargin += dx; 
         relativeLayoutParams.topMargin += dy; 
         tv1.setLayoutParams(relativeLayoutParams); 

         // Save where the user's finger was for the next ACTION_MOVE 
         pressed_x = x; 
         pressed_y = y; 
         break; 

        case MotionEvent.ACTION_UP: 
         Log.d("TAG","@@@@ TV1 ACTION_UP"); 

         break; 
       } 

       return true; 
      } 
     }; 
     public final View.OnTouchListener mOnTouchListenerTv2 = new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       RelativeLayout.LayoutParams relativeLayoutParams1 = (RelativeLayout.LayoutParams) tv2.getLayoutParams(); 

       switch (event.getActionMasked()) { 
        case MotionEvent.ACTION_DOWN: 
         Log.d("TAG","@@@@ TV2 ACTION_DOWN"); 
         // Where the user started the drag 
         pressed_x1 = (int) event.getRawX(); 
         pressed_y1 = (int) event.getRawY(); 
         break; 

        case MotionEvent.ACTION_MOVE: 
         Log.d("TAG","@@@@ TV2 ACTION_MOVE"); 
         // Where the user's finger is during the drag 
         final int x = (int) event.getRawX(); 
         final int y = (int) event.getRawY(); 

         // Calculate change in x and change in y 
         int dx = x - pressed_x1; 
         int dy = y - pressed_y1; 

         // Update the margins 
         relativeLayoutParams1.leftMargin += dx; 
         relativeLayoutParams1.topMargin += dy; 
         tv2.setLayoutParams(relativeLayoutParams1); 

         // Save where the user's finger was for the next ACTION_MOVE 
         pressed_x1 = x; 
         pressed_y1 = y; 
         break; 

        case MotionEvent.ACTION_UP: 
         Log.d("TAG","@@@@ TV2 ACTION_UP"); 
         break; 
       } 

       return true; 
      } 
     }; 
    } 
+0

当我使用单个TextView但它不工作时它的工作,当我使用多个TextView时(当我移动后触摸tv1或触摸tv2,每次tv1移动事件,尽管我尝试移动tv2)。 –

+0

添加更新的代码 – user2025187

+0

我在下面添加了我的代码 –

0

XML代码:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/linear" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical"> 
    <TextView 
    android:id="@+id/tv1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:padding="10dp" 
    android:text="Test1" /> 
    <TextView 
    android:id="@+id/tv2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:padding="10dp" 
    android:layout_centerInParent="true" 
    android:text="Test2" /> 
</RelativeLayout> 

Java代码:

public class MainActivity extends Activity { 

int pressed_x,pressed_y,pressed_x1,pressed_y1; 
TextView tv1,tv2; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    tv1 = (TextView) findViewById(R.id.tv1); 
    tv2 = (TextView) findViewById(R.id.tv2); 

    tv1.setOnTouchListener(mOnTouchListenerTv1); 
    tv2.setOnTouchListener(mOnTouchListenerTv2); 
} 

public final View.OnTouchListener mOnTouchListenerTv1 = new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     RelativeLayout.LayoutParams relativeLayoutParams = (RelativeLayout.LayoutParams) tv1.getLayoutParams(); 


     switch (event.getActionMasked()) { 
      case MotionEvent.ACTION_DOWN: 
       Log.d("TAG","@@@@ TV1 ACTION_UP"); 
       // Where the user started the drag 
       pressed_x = (int) event.getRawX(); 
       pressed_y = (int) event.getRawY(); 
       break; 

      case MotionEvent.ACTION_MOVE: 
       Log.d("TAG","@@@@ TV1 ACTION_UP"); 
       // Where the user's finger is during the drag 
       final int x = (int) event.getRawX(); 
       final int y = (int) event.getRawY(); 

       // Calculate change in x and change in y 
       int dx = x - pressed_x; 
       int dy = y - pressed_y; 

       // Update the margins 
       relativeLayoutParams.leftMargin += dx; 
       relativeLayoutParams.topMargin += dy; 
       tv1.setLayoutParams(relativeLayoutParams); 

       // Save where the user's finger was for the next ACTION_MOVE 
       pressed_x = x; 
       pressed_y = y; 
       break; 

      case MotionEvent.ACTION_UP: 
       Log.d("TAG","@@@@ TV1 ACTION_UP"); 

       break; 
     } 

     return true; 
    } 
}; 
public final View.OnTouchListener mOnTouchListenerTv2 = new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     RelativeLayout.LayoutParams relativeLayoutParams1 = (RelativeLayout.LayoutParams) tv2.getLayoutParams(); 

     switch (event.getActionMasked()) { 
      case MotionEvent.ACTION_DOWN: 
       Log.d("TAG","@@@@ TV2 ACTION_DOWN"); 
       // Where the user started the drag 
       pressed_x1 = (int) event.getRawX(); 
       pressed_y1 = (int) event.getRawY(); 
       break; 

      case MotionEvent.ACTION_MOVE: 
       Log.d("TAG","@@@@ TV2 ACTION_MOVE"); 
       // Where the user's finger is during the drag 
       final int x = (int) event.getRawX(); 
       final int y = (int) event.getRawY(); 

       // Calculate change in x and change in y 
       int dx = x - pressed_x1; 
       int dy = y - pressed_y1; 

       // Update the margins 
       relativeLayoutParams1.leftMargin += dx; 
       relativeLayoutParams1.topMargin += dy; 
       tv2.setLayoutParams(relativeLayoutParams1); 

       // Save where the user's finger was for the next ACTION_MOVE 
       pressed_x1 = x; 
       pressed_y1 = y; 
       break; 

      case MotionEvent.ACTION_UP: 
       Log.d("TAG","@@@@ TV2 ACTION_UP"); 
       break; 
     } 

     return true; 
    } 
}; 

}