0

Android向けのプログラミングを始めたばかりです。私は自分の問題をたくさん探しましたが、アドバイスは役に立ちませんでした。タッチ座標で同じ画像が画面に表示されるようにします。それが私がやったことです:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    View main_view = (View)findViewById(R.id.main_view);
    main_view.setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            ImageView image = new ImageView(getApplicationContext());
            //ImageView image = (ImageView)findViewById(R.id.broken);
            image.setImageResource(R.drawable.broken);
            image.setX(event.getX() + image.getWidth() / 2);
            image.setY(event.getY() - image.getHeight() / 2);
            LinearLayout top_layout = (LinearLayout) findViewById(R.id.top_layout);
            LayoutParams p = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
            image.setLayoutParams(p);
            top_layout.addView(image);

            return true;
        }
    });
}

私にはすべてが正しいように思えますが、画面に触れても何も起こりません。私が犯した明らかな間違いはどこですか?前もって感謝します。

4

2 に答える 2

1

でそれを行うことはできませんLinearLayoutFrameLayout代わりにa を使用しましょう。

activity_main.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/framelayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
</FrameLayout>

MainActivity.java

public class MainActivity extends Activity {

    private FrameLayout mLayout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mLayout = (FrameLayout) findViewById(R.id.framelayout);
        mLayout.setOnTouchListener(mListener);

    }

    private OnTouchListener mListener = new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction()) {

            case MotionEvent.ACTION_DOWN:
                return true;

            case MotionEvent.ACTION_UP:
                // decode the resource to get width and height
                Options opts = new Options();
                opts.inJustDecodeBounds = true;
                BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher, opts);

                int imageWidth = opts.outWidth;
                int imageHeight = opts.outHeight;

                // set the imageview's top and left margins
                FrameLayout.LayoutParams lp = new LayoutParams(imageWidth, imageHeight);
                lp.leftMargin = (int) (event.getX() - (imageWidth / 2));
                lp.topMargin = (int) (event.getY() - (imageHeight / 2));

                ImageView image = new ImageView(MainActivity.this);
                image.setImageResource(R.drawable.ic_launcher);
                mLayout.addView(image, lp);

                return false;

            }
            return false;
        }
    };

}
于 2013-07-06T13:16:58.667 に答える
0

setX と setY は画像の位置を設定しません。基本的に画像をその場でスクロールします。位置は、その親ビューによって制御されます。その親は線形レイアウトであるため、レイアウト内で常にその上にあるものの下または右に配置されます。正確にどこかに配置したい場合は、非推奨の AbsoluteLayout など、それをサポートする親に配置する必要があります。

于 2013-07-06T11:40:47.020 に答える