2012-12-12 71 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不常用)

相關問題