2017-11-25 67 views
0

您好我使用drag'n下降选项而言,我采用了android工作室3 & SDK 26 当我到触摸事件中,我得到错误信息写一个应用程序: java.lang.ClassCastException :android.widget.LinearLayout $的LayoutParams不能转换到android.widget.RelativeLayout $的LayoutParams 那代码:拖放功能onTouch事件失败

private View.OnTouchListener OnTouchListener() { 

    return new View.OnTouchListener() { 
     @SuppressLint("ClickableViewAccessibility") 
     @Override 
     public boolean onTouch(View view, MotionEvent motionEvent) { 

      final int x = (int) motionEvent.getRawX(); 
      final int y = (int) motionEvent.getRawY(); 
      switch (motionEvent.getAction() & MotionEvent.ACTION_MASK) { 

       case MotionEvent.ACTION_DOWN: 
        RelativeLayout.LayoutParams lParams = (RelativeLayout.LayoutParams) 
          view.getLayoutParams(); 
        xDelta = x - lParams.leftMargin; 
        yDelta = y - lParams.topMargin; 
        break; 

       case MotionEvent.ACTION_UP: 
        break; 

       case MotionEvent.ACTION_MOVE: 
        RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) view 
          .getLayoutParams(); 
        layoutParams.leftMargin = x - xDelta; 
        layoutParams.topMargin = y - yDelta; 
        layoutParams.rightMargin = 0; 
        layoutParams.bottomMargin = 0; 
        view.setLayoutParams(layoutParams); 
        break; 
      } 
      mainlayout.invalidate(); 
      return true; 
     } 
    }; 
} 

我之前使用的代码,它的工作,我无法理解什么是错在这里。

回答

0

基于错误消息的问题无关,与拖拽,它看起来像这部分代码:

RelativeLayout.LayoutParams lParams =(RelativeLayout.LayoutParams) view.getLayoutParams() ;

RelativeLayout.LayoutParams的LayoutParams =(RelativeLayout.LayoutParams)视图 .getLayoutParams();

应改为:

LinearLayout.LayoutParams lParams =(LinearLayout.LayoutParams) view.getLayoutParams();

LinearLayout.LayoutParams的LayoutParams =(LinearLayout.LayoutParams)视图 .getLayoutParams();

你没有把你的XML,但我假设“视图”的父母是一个LinearLayout的权利?

+0

<?XML版本= “1.0” 编码= “UTF-8”?>

+0

其相对布局... –

+0

好吧,我认为在这种情况下触摸传播到你认为的孩子。如果您对特定视图内的触摸感兴趣,也许应该在使用RelativeLayout.LayoutParams layoutParams之前添加一种测试。像if(view ==我specefic视图)然后把其余的代码。 – Jaja