在屏幕上拖动时 ImageView 被剪切

ImageView cutted when dragging through the screen

我在学校做一个项目,我在叠加的 ImageView 中有这个小角色(目标是为那些知道它是什么的人创建一个 Shimeji)。 在屏幕上拖动 ImageView 时出现问题。

因此 ImageView 中设置的图像正在移动,但它被 ImageView 截断了(至少我猜是这样,因为我一移动它就开始截断)

这是我的 xml:

 <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/Layout">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/View"
            android:adjustViewBounds="true"
         />

</FrameLayout>

然后我将它添加到屏幕的方式:

public void onCreate() {
    super.onCreate();

    view = new ImageView(this);
    view.setBackgroundResource(R.drawable.idle);
    idleanimation = (AnimationDrawable)view.getBackground();
    idleanimation.start();

    view.setOnClickListener(new Click());
    view.setOnLongClickListener(new drag());

    li = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
    wm = (WindowManager) getSystemService(WINDOW_SERVICE);
    WindowManager.LayoutParams params = new WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.TYPE_PHONE,
            WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
            PixelFormat.TRANSLUCENT);
    params.gravity = Gravity.START;
    myview = li.inflate(R.layout.playground, null);
    wm.addView(view, params);
}

然后我在屏幕上拖动它的方式:

 private class drag implements View.OnLongClickListener {
    float x,y;
    @Override
    public boolean onLongClick(View v) {
        view.setOnTouchListener(new action());
        return false;
    }

    private class action implements View.OnTouchListener {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction()){
            case MotionEvent.ACTION_DOWN:
            return true;
            case MotionEvent.ACTION_MOVE:
                x=event.getX();
                y=event.getY();

                view.setX(x-81);
                view.setY(y - 100);
            break;
            case MotionEvent.ACTION_UP:
            break;
            }
            return false;
        }
    }
}

我很乐意得到一些帮助来理解这一点。

请在 Imageview 中像这样设置 ScaleType android:scaleType="fitXY"

  <ImageView
        android:id="@+id/grid_item_image"
        android:layout_width="wrap_content"
        android:paddingLeft="15dp"
        android:paddingRight="15dp"
        android:layout_gravity="center"
        android:scaleType="fitXY"
        android:layout_height="100dp"/>

在网上四处搜索后,我终于找到了对我有帮助的东西:

 case MotionEvent.ACTION_MOVE:
                int x_cord = (int) event.getRawX();
                int y_cord = (int) event.getRawY();
                params.x= (x_cord-360);
                params.y =(y_cord-640);
                wm.updateViewLayout(view, params);

            break;

是 window 管理器 (wm),移动它而不是视图就成功了。