2012-12-12 34 views
0

如何在android应用程序的动态触摸位置添加按钮?如何在android应用程序的触摸位置动态地添加按钮?

想象一下,我有一个空白的活动,并使用触摸监听器触摸我可以得到x,y坐标。当我触摸我想要插入按钮的位置(x,y)我动态触摸。我该怎么做?

+0

你有什么尝试? –

回答

0

我在布局上有很多小部件。因此,我最初将它们全部隐藏起来,并随时分配新的x,y坐标w.r.t.通过使用"Object Animator"触摸并移动小部件(例如按钮)到触摸的x,y坐标。

-1

你需要一个相对布局,它在你的活动的某一层有fill_parent宽度和高度。那么当有人点击屏幕时,你需要获得点,但ontouchlistener并在相对布局的x和y上创建一个新的imageview,但要确保你的相对布局嵌套到整个活动屏幕,并具有确切的x和y与设备屏幕。

通过ontouchlistener

img.setOnTouchListener(new OnTouchListener() { 

      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       event.getX()  //cordinates wrt view 
       event.getRawX() //abs cordinates on screen 
           event.getY()  //cordinates wrt view 
       event.getRawY() //abs cordinates on screen 
       return false; 
      } 
     }); 
0

得到x和y我不知道究竟你是否可以创建在特定位置上的按钮。尽管您可以使用AbsoluteLayout完成此操作,但现在已弃用。

我宁愿最初在布局中定义一个按钮并保持其不可见,然后在触摸事件中使用Translate Animation将其移动到特定位置。另外不要忘记让按钮可见。

+0

谢谢。我从未使用过翻译动画。你有任何演示例子吗? – Giz

1

我在这里发布一个带有文本框的演示。你可以改变你的要求。

activity_main.xml中

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

     <LinearLayout android:layout_height="wrap_content" 
      android:layout_width="wrap_content" 
      android:orientation="horizontal" 
      android:id="@+id/layout_map" 
      > 

      <TextView android:layout_height="wrap_content" 
       android:layout_width="wrap_content" 

       android:text="One" 
       /> 
      <TextView android:layout_height="wrap_content" 
       android:layout_width="wrap_content" 

       android:text="One" 
       /> 
     </LinearLayout> 
    </FrameLayout> 

</LinearLayout> 

MainActivity.java

import android.os.Bundle; 
import android.app.Activity; 
import android.util.Log; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.View.OnTouchListener; 
import android.widget.FrameLayout; 
import android.widget.LinearLayout; 

public class MainActivity extends Activity { 
    FrameLayout frmLayout; 

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

     frmLayout = (FrameLayout) findViewById(R.id.frameLayout1); 
     frmLayout.setFocusable(true); 
     LinearLayout et = new LinearLayout(this); 

     frmLayout.addView(et, 100, 100); 
     frmLayout.setOnTouchListener(new OnTouchListener() { 

      public boolean onTouch(View v, MotionEvent event) { 
       Log.i("TESTING", 
         "touch x,y == " + event.getX() + "," + event.getY()); 
       frmLayout.setPadding(Math.round(event.getX() - 20), 
         Math.round(event.getY()), 0, 0); 
       return true; 
      } 
     }); 

    } 
+0

谢谢。这非常有帮助。那么,你有什么想法,我怎么可以做同样的多点触摸?也许使用多个框架布局? – Giz

+0

让我试试...然后我会告诉你 –

+0

谢谢..我也会试试..让我知道你是否有任何线索。 – Giz

0

你可以得到x和y通过的onTouchEvent坐标。

您应该重写onTouchEvent(MotionEvent事件),然后调用event.getX()和event.getY()来获取用户触摸位置(它们将是浮动)。

然后,您应该使用AbsoluteLayout并在子节点中指定android:layout_x和android:layout_y。 (AbsoluteLayouts不常用)

相关问题