在屏幕上拖动时 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),移动它而不是视图就成功了。
我在学校做一个项目,我在叠加的 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),移动它而不是视图就成功了。