如何在android應用程序的動態觸摸位置添加按鈕?如何在android應用程序的觸摸位置動態地添加按鈕?
想象一下,我有一個空白的活動,並使用觸摸監聽器觸摸我可以得到x,y座標。當我觸摸我想要插入按鈕的位置(x,y)我動態觸摸。我該怎麼做?
如何在android應用程序的動態觸摸位置添加按鈕?如何在android應用程序的觸摸位置動態地添加按鈕?
想象一下,我有一個空白的活動,並使用觸摸監聽器觸摸我可以得到x,y座標。當我觸摸我想要插入按鈕的位置(x,y)我動態觸摸。我該怎麼做?
我在佈局上有很多小部件。因此,我最初將它們全部隱藏起來,並隨時分配新的x,y座標w.r.t.通過使用"Object Animator"觸摸並移動小部件(例如按鈕)到觸摸的x,y座標。
你需要一個相對佈局,它在你的活動的某一層有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;
}
});
得到x和y我不知道究竟你是否可以創建在特定位置上的按鈕。儘管您可以使用AbsoluteLayout完成此操作,但現在已棄用。
我寧願最初在佈局中定義一個按鈕並保持其不可見,然後在觸摸事件中使用Translate Animation將其移動到特定位置。另外不要忘記讓按鈕可見。
謝謝。我從未使用過翻譯動畫。你有任何演示例子嗎? – Giz
我在這裏發佈一個帶有文本框的演示。你可以改變你的要求。
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;
}
});
}
你可以得到x和y通過的onTouchEvent座標。
您應該重寫onTouchEvent(MotionEvent事件),然後調用event.getX()和event.getY()來獲取用戶觸摸位置(它們將是浮動)。
然後,您應該使用AbsoluteLayout並在子節點中指定android:layout_x和android:layout_y。 (AbsoluteLayouts不常用)
你有什麼嘗試? –