2016-03-15 94 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問題的類型 –