2017-11-25 18 views
0

こんにちは、私は私が、私はエラーメッセージが表示されますタッチイベントを取得するとImはアンドロイドスタジオ3 & SDK 26 を使用して、ドロップオプションをドラッグ&使用してアプリを書いて失敗しました: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を入れていませんが、 "view"の親がLinearLayoutの権利であると仮定していますか?

+0

の<?xml version = "1.0" エンコード= "UTF-8"?>

+0

相対レイアウト... –

+0

申し訳ありません、この場合、タッチはあなたの見解の子供たち。特定のビュー内のタッチに興味がある場合は、RelativeLayout.LayoutParams layoutParamsを使用する前に一種のテストを追加する必要があります。 if(view == my specefic view)のようにして、残りのコードを入れてください。 – Jaja

関連する問題