0

タッチで動的に記述された位置にAndroidアプリケーションにボタンを追加するにはどうすればよいですか?

空白のアクティビティがあり、on touch リスナーを使用して x、y 座標を取得できるとします。タッチすると、動的にタッチした位置(x、y)にボタンを挿入したいと思います。どうすればいいのですか?

4

5 に答える 5

1

私はここに 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

私のレイアウトにはたくさんのウィジェットがありました。そのため、最初はそれらをすべて非表示にして、タッチ時に新しい x、y 座標をタッチに割り当て、「オブジェクト アニメーター」を使用してウィジェット (ボタンなど) をタッチの x、y 座標に移動しました。

于 2012-12-13T15:24:18.553 に答える
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

特定の位置にボタンを作成できるかどうかは正確にはわかりません。AbsoluteLayout を使用してこれを行うこともできましたが、現在は推奨されていません。

最初にレイアウトでボタンを定義して非表示にし、次にタッチ イベントでTranslate Animationを使用して特定の場所に移動することをお勧めします。また、ボタンを見えるようにすることを忘れないでください。

于 2012-12-12T13:57:06.067 に答える
-1

アクティビティのあるレイヤーで、fill_parent の幅と高さを持つ相対的なレイアウトが必要です。次に、誰かが画面をクリックすると、ポイントを取得する必要がありますが、ontouchlistener を取得し、相対レイアウトの正確な 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 に答える