java - 每当单击按钮时,都会在屏幕上多次放置相同的图像

标签 java android dynamic imageview

当用户单击按钮时,同一图像将在多个位置一次又一次显示。我正在使用触摸监听器来移动图像。这是有效的,但我无法使用相同的 ImageView 或 for 循环创建多个图像,请帮忙。这是我想多次创建的图像 这是我的 xml

      <?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:id="@+id/main_html"
tools:context="com.incubers.signondoc.ui.HtmlActivity">

<Button
    android:id="@+id/save_edited"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:visibility="gone"
    style="?android:button"
    android:text="@string/hint_save" />


<com.github.barteksc.pdfviewer.PDFView
    android:id="@+id/viewpdfHtml"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ImageView
        android:id="@+id/imageSign"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/no_connection" />

</com.github.barteksc.pdfviewer.PDFView>`

这是我的 ontouchlistener,用于移动图像和其他代码

ImageView imageView;
 ViewGroup mainLayout;
 private View.OnTouchListener onTouchListener() {
    return (view, event) -> {
        final int x = (int) event.getRawX();
        final int y = (int) event.getRawY();
        switch (event.getAction() & MotionEvent.ACTION_MASK) {

            case MotionEvent.ACTION_DOWN:
                RelativeLayout.LayoutParams lParams = (RelativeLayout.LayoutParams)
                        view.getLayoutParams();
                xDelta = x - lParams.leftMargin;
                yDelta = y - lParams.topMargin;
                break;

            case MotionEvent.ACTION_UP:
                float xD = event.getX();
                float yD = event.getY();
                DisplayMetrics displayMetrics = this.getResources().getDisplayMetrics();
                float   XDis = displayMetrics.xdpi;
                float  YDis = displayMetrics.ydpi;
                finalX = xD/XDis*100;
                finalY  = yD/YDis*100;

                break;
            case MotionEvent.ACTION_MOVE:
                RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) view
                        .getLayoutParams();
                layoutParams.leftMargin = x - xDelta;
                layoutParams.topMargin = y - yDelta;
                layoutParams.rightMargin = 0;
                layoutParams.bottomMargin = 0;
                view.setLayoutParams(layoutParams);

                break;

        }
        mainLayout.invalidate();
        return true;
    };
}

这是点击时应显示图像的按钮

  buttonSign.setOnClickListener(view ->{

            }

        });

最佳答案

您需要动态创建 ImageView 才能完成这项工作,这可能会帮助您:

Create ImageViews dynamically inside a loop

关于java - 每当单击按钮时,都会在屏幕上多次放置相同的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58199345/

相关文章:

android - 如何避免在 Google 登录对话框后获得错误的 token ?

swift - 如何根据 swift 3 中动态创建的按钮的文本设置按钮宽度?

javascript - 使用javascript动态加载内容的问题

java - append 到 ObjectOutputStream

java - 安装 Hudson 时出现错误?

java - 创建数据库时出现 SQLiteException - "android"附近的 SQLiteException

android - AsyncTask 与 Activity.runOnUiThread() 与 Handler.post()

c - 对动态分配的数组进行二分查找

java - mysql count(*) 语法错误

java - Java(Awt)中的全屏窗口事件在哪里?