拖动屏幕时,ImageView会切断

时间:2016-03-15 10:39:00

标签: android imageview drag

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

The image when it's on the screenThen when I drag it around the screen

所以在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;
        }
    }
}

为了理解这一点,我很乐意得到一些帮助。

2 个答案:

答案 0 :(得分:0)

请设置ScaleType像这样在Imageview中 android:scaleType =&#34; fitXY&#34;

  <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"/>

答案 1 :(得分:0)

在挖掘网络后,我终于找到了帮助我的东西:

 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;

这是窗口管理器(wm),移动它而不是视图就行了。