2016-03-15 61 views
1

我在学校制作一个项目,并且在叠加的ImageView中有这个小角色(目标是为那些知道它是什么的人创建一个Shimeji)。 通过屏幕拖动ImageView时,我遇到了问题。当拖动屏幕时切断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; 
     } 
    } 
} 

我很乐意获得一些帮助,以了解这一点。

回答

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),移动它而不是视图做了伎俩。

0

请将ScaleType像这样的ImageView 机器人: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"/> 
+0

不好意思,这不会改变任何东西... – ZackStrife

+0

同样的问题在这里,实际上有什么建议? –

+0

@SérgioS.Filho问题的类型 –