0

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

想象一下,我有一个空白活动,并且使用 on touch 侦听器进行触摸时,我可以获得 x,y 坐标。当我触摸时,我想在我动态触摸的位置(x,y)插入按钮。我该怎么做?

4

5 回答 5

1

我在这里发布了一个带有 textbox 的演示。您可以根据您的要求进行更改。

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;
            }
        });

    }
于 2012-12-12T14:00:44.107 回答
0

我不完全知道您是否可以在特定位置创建按钮。虽然您可以使用 AbsoluteLayout 完成此操作,但现在已弃用。

我宁愿最初在布局中定义一个按钮并使其不可见,然后在触摸事件上,使用翻译动画将其移动到特定位置。也不要忘记使按钮可见。

于 2012-12-12T13:57:06.067 回答
0

您可以通过 onTouchEvent 获取 x 和 y 坐标。

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

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

于 2012-12-12T14:00:53.387 回答
0

我的布局上有很多小部件。所以我最初让它们全部不可见,并在触摸时为触摸分配了新的 x,y 坐标,并通过使用“Object Animator”将小部件(例如按钮)移动到触摸的 x,y 坐标。

于 2012-12-13T15:24:18.553 回答
-1

您需要一个相对布局,该布局在您的活动的某些层具有 fill_parent 宽度和高度。然后当有人点击屏幕时,您需要在触摸监听器上获得要点,并在您的相对布局上的确切 x 和 y 处创建一个新的图像视图,但请确保您的相对布局嵌套到您的整个活动屏幕并具有准确的 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;
            }
        });
于 2012-12-12T13:53:36.800 回答