如何在动态触摸描述的位置在Android应用程序中添加按钮?
想象一下,我有一个空白活动,使用触摸式监听器触摸我可以得到x,y坐标。当我触摸时,我想在位置(x,y)插入按钮,我动态触摸。我该怎么做?
答案 0 :(得分: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;
}
});
}
答案 1 :(得分:0)
我不知道你是否可以在特定位置创建按钮。虽然您可以使用AbsoluteLayout完成此操作,但现在已弃用。
我宁愿首先在布局中定义一个按钮并使其保持不可见,然后在触摸事件中,使用Translate Animation将其移动到特定位置。也别忘了让按钮可见。
答案 2 :(得分:0)
您可以通过onTouchEvent获取x和y坐标。
您应该覆盖onTouchEvent(MotionEvent事件),然后调用event.getX()和event.getY()来获取用户触摸的坐标位置(它们将浮动)。
然后你应该使用AbsoluteLayout并在子节点中指定android:layout_x和android:layout_y。 (AbsoluteLayouts不常用)
答案 3 :(得分:0)
我的布局上有很多小部件。所以我最初保持它们都是隐形的并且在触摸时分配了新的x,y坐标w.r.t.触摸并使用"Object Animator"将小部件(例如按钮)移动到触摸的x,y坐标。
答案 4 :(得分:-1)
你需要一个相对布局,它在你活动的某个层有fill_parent宽度和高度。然后当有人点击屏幕时你需要获得点但是ontouchlistener并在相对布局上的x和y处创建一个新的imageview,但要确保你的相对布局嵌套到整个活动屏幕并且具有精确的x和y使用设备屏幕。
通过ontouchlistener获取x和y
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;
}
});