Android 用户触摸屏上的新图像

Android 用户触摸屏上的新图像,android,touch-event,motionevent,Android,Touch Event,Motionevent,嗨,我是安卓系统的新手。我的问题是,是否有任何功能可以将图像从可绘制显示到屏幕中。顺便说一下,我可以在我触摸的坐标上移动相同的图像,我只需要将新图像放置在我触摸的坐标上 这是我的密码: public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); se

嗨,我是安卓系统的新手。我的问题是,是否有任何功能可以将图像从可绘制显示到屏幕中。顺便说一下,我可以在我触摸的坐标上移动相同的图像,我只需要将新图像放置在我触摸的坐标上

这是我的密码:

public class MainActivity extends Activity {



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

}

    private void placeImage(float X, float Y) {
        ImageView flower = (ImageView) findViewById(R.id.img);

        int touchX = (int) X;
        int touchY = (int) Y;


        flower.layout(touchX, touchY, touchX + 48, touchY + 48);


        int viewWidth = flower.getWidth();
        int viewHeight = flower.getHeight();
        viewWidth = viewWidth / 2;
        viewHeight = viewHeight / 2;

        flower.layout(touchX - viewWidth, touchY - viewHeight, touchX + viewWidth, touchY + viewHeight);
    }



public boolean onTouchEvent(MotionEvent event) {
    super.onTouchEvent(event);
    int eventAction = event.getAction();
    switch (eventAction) {
        case MotionEvent.ACTION_DOWN:
            float TouchX = event.getX();
            float TouchY = event.getY();
            placeImage(TouchX, TouchY);
            break;
    }
    return true;
}

假设您将图像放置在
框架布局中

private void placeImage(float X, float Y) {
    ImageView flower = (ImageView) findViewById(R.id.img);

    int touchX = (int) X;
    int touchY = (int) Y;

    FrameLayout.LayoutParams mlp = (FrameLayout.LayoutParams) flower.getLayoutParams();
    mlp.marginLeft = touchX;
    mlp.marginTop = touchY;
    mlp.width = FrameLayout.LayoutParams.WRAP_CONTENT;
    mlp.height = FrameLayout.LayoutParams.WRAP_CONTENT;
    flower.setLayoutParams(mlp);
}
此外,宽度和高度可以在设计时设置为
WRAP\u CONTENT
,以告知元素将其大小设置为内容的大小


可以通过创建新的ImageView来添加新图像

protected void onCreate(Bundle savedInstanceState){
    ...
    frameLayout = (FrameLayout) findViewById(R.id.box);
    ...
}

private void placeImage(float X, float Y) {
    ImageView newImage = new ImageView(this);
    //Set contents of new ImageView
    newImage.setImage(R.drawable.example_image);
    //Create layout parameters object with width and height set to size of contents
    FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT);
    //Offset image by X and Y from left and top of its parent, in our case FrameLayout
    lp.marginLeft = X;
    lp.marginTop = Y;
    //Add new ImageView into layout
    frameLayout.AddView(newImage, lp);
}

其中
frameLayout
是指放置在布局中的
frameLayout
视图组和
R.drawable。示例\u image
是要显示的图像。

首先通过调用
setBounds
设置可绘制尺寸和位置,然后通过调用
draw(Canvas c)
(也是一种具有正确画布的
Drawable
)方法(您可以从任何适当的
视图的
onDraw
方法中获得一些)作为参数传递。哦,你能从上面的我的代码中编辑吗?在上面的代码中,你试图通过调用
layout
方法来移动ImageView。只有当你编写自定义
ViewGroup
时,这才是正确的。因为你使用了视图子类-看看Android中不同的视图是如何放置在不同的布局上的。例如:,如果你试图绝对放置元素,尝试
FrameLayout
。哦,我的实际问题是,当我触摸一个图像时,该图像应出现,并且该图像不应移动,如果再次触摸另一个坐标,则应显示相同的图像,但前一个图像应保留。希望您能理解我的问题。如果我的英语不好,请原谅