2015-02-11 64 views
0

我一直在使用所有宽度和高度wrap_content在相关布局中拖动图像的代码。当涉及到执行时,它会显示闪烁的箭头图像以在相对布局中设置imageview的y位置。请您告诉我在任意限制内垂直构建图像的方式。 ?Android imageview在限制内移动拖动

下面是我的代码:

dragImage.setOnTouchListener(new OnTouchListener(){ 
       //private int _xDelta; 
       private int _yDelta; 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 

       v.getParent().requestDisallowInterceptTouchEvent(true); 



       final float y = event.getY(); 

       switch (event.getAction()) { 
       case MotionEvent.ACTION_DOWN: 
        //_yDelta = Y - lParams.topMargin; 
        mOldY2 = y; 
        break; 
       case MotionEvent.ACTION_UP: 
        mViewPager.setPagingEnabled(true); 
        break; 
       case MotionEvent.ACTION_POINTER_DOWN: 
        break; 
       case MotionEvent.ACTION_POINTER_UP: 
        break; 
       case MotionEvent.ACTION_MOVE: 
        btn4.setBackgroundResource(R.drawable.fbl02); 
        final float dy = y - mOldY2; 
        mNewY2 += dy; 
        mOldY2 = y; 
        System.out.println(mNewY2);     

        while(mNewY2 > 224){ 
         mNewY2 -= 224; 
        } 

        while(mNewY2 < 157){ 
         mNewY2 += 157; 
        } 


        if(mNewY2 < 157 || mNewY2 > 224) 
         break; 

        v.setTranslationY((int)mNewY2); 

        v.invalidate(); 

        float power = (float) (51.5/67 -(0.2/67) * mNewY2) ; 
        System.out.println(power); 

        Float roundF = new Float(Math.round(power)); 
        midBandStick = roundF; 
        btn4.setText(String.valueOf(midBandStick)); 
        //} 
        //break; 
       } 
       return true; 

      } 

回答

4

试试这个,看看它是否有助于你

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     parent = (ViewGroup) findViewById(R.id.root); 
image = (ImageView) findViewById(R.id.image1); 
     parent.post(new Runnable() { 

      @Override 
      public void run() { 
       originalX = (int) image1.getX(); 
       originalY = (int) image1.getY(); 
      } 
     }); 


       image.setOnTouchListener(this); 
    } 

    public boolean onTouch(View view, MotionEvent event) { 
     final int X = (int) event.getRawX(); 
     final int Y = (int) event.getRawY(); 
     switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      RelativeLayout.LayoutParams lParams = (RelativeLayout.LayoutParams) view 
        .getLayoutParams(); 
      x = X - lParams.leftMargin; 
      y = Y - lParams.topMargin; 
      break; 
     case MotionEvent.ACTION_UP: 
      RelativeLayout.LayoutParams layout = (RelativeLayout.LayoutParams) view 
        .getLayoutParams(); 
      layout.leftMargin = originalX; 
      layout.topMargin = originalY; 
      view.setLayoutParams(layout); 
      break; 
     case MotionEvent.ACTION_MOVE: 
      RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) view 
        .getLayoutParams(); 
      layoutParams.leftMargin = X - x; 
      layoutParams.topMargin = Y - y; 
      view.setLayoutParams(layoutParams); 
      break; 

     } 
     parent.invalidate(); 
     return true; 
    } 

这将让你在布局中拖动图像,当你离开图像返回到它的原始位置。

+0

如果我使用scrollview嵌入所有控件,该怎么办?我必须计算什么额外抵消? – 2015-02-12 03:32:48

+0

以及我不知道如果scrollview可以做到这一点,你可以尝试它。 – 2015-02-12 04:57:39