MainActivity.java
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); RelativeLayout root = (RelativeLayout) findViewById(R.id.root); DragDropListener listener = new DragDropListener(this, root); ImageView iv = (ImageView)findViewById(R.id.icon); iv.setOnLongClickListener(listener); // iv.setOnDragListener(listener); GridLayout layout1 = (GridLayout)findViewById(R.id.layout1); layout1.setOnDragListener(listener); for(int i = 0; i < layout1.getChildCount(); i++){ layout1.getChildAt(i).setOnDragListener(listener); } LinearLayout layout2 = (LinearLayout)findViewById(R.id.layout2); layout2.setOnDragListener(listener); for(int i = 0; i < layout2.getChildCount(); i++){ layout2.getChildAt(i).setOnDragListener(listener); } TextView delete = (TextView)findViewById(R.id.delete); delete.setOnDragListener(listener); TextView rename = (TextView)findViewById(R.id.rename); rename.setOnDragListener(listener); } }DragDropListener.java
public class DragDropListener implements OnLongClickListener, OnDragListener { static String TAG = "DragDrop"; private RelativeLayout mRootLayout; private Context mContext; private ViewGroup mDragStartPosition = null; public DragDropListener(Context context, RelativeLayout root) { mContext = context; mRootLayout = root; } @Override public boolean onLongClick(View v) { ClipData data = ClipData.newPlainText("text", v.toString()); View.DragShadowBuilder shadow = new MyDragShadowBuilder(v); v.startDrag(data, shadow, v, 0); // v.setVisibility(View.INVISIBLE); ViewGroup owner = (ViewGroup) v.getParent(); owner.removeView(v); mRootLayout.findViewById(R.id.layout_head).setVisibility(View.VISIBLE); return false; } class MyDragShadowBuilder extends View.DragShadowBuilder { private Drawable shadow; public MyDragShadowBuilder(View v) { super(v); shadow = ((ImageView) v).getDrawable(); } @Override public void onProvideShadowMetrics(Point size, Point touch) { int width = getView().getWidth(); int height = getView().getHeight(); shadow.setBounds(0, 0, width, height); size.set(width, height); touch.set(width, height); } @Override public void onDrawShadow(Canvas canvas) { shadow.draw(canvas); } } @Override public boolean onDrag(View v, DragEvent event) { final int action = event.getAction(); View view = (View) event.getLocalState(); switch (action) { case DragEvent.ACTION_DRAG_STARTED: mDragStartPosition = (ViewGroup) view.getParent(); return true; case DragEvent.ACTION_DRAG_ENTERED: return true; case DragEvent.ACTION_DRAG_EXITED: return true; case DragEvent.ACTION_DROP: if (v.getTag() == null){ ViewGroup owner = (ViewGroup) v.getParent(); int index = owner.indexOfChild(v); owner.addView(view, index); } else if (v.getTag().equals("layout1") || v.getTag().equals("layout2")) { ViewGroup container = (ViewGroup) v; container.addView(view); view.setVisibility(View.VISIBLE); } else if (v.getTag().equals("Delete")) { Toast.makeText(mContext, "Delete", Toast.LENGTH_SHORT).show(); if (mDragStartPosition != null) mDragStartPosition.addView(view); view.setVisibility(View.VISIBLE); } else if (v.getTag().equals("Rename")) { Toast.makeText(mContext, "Rename", Toast.LENGTH_SHORT).show(); if (mDragStartPosition != null) mDragStartPosition.addView(view); view.setVisibility(View.VISIBLE); } return true; case DragEvent.ACTION_DRAG_ENDED: mRootLayout.findViewById(R.id.layout_head).setVisibility(View.INVISIBLE); return true; default: return true; } } }activity_main.xml
android:id="@+id/root" android:layout_height="match_parent" android:layout_width="match_parent" tools:context=".MainActivity"
0 件のコメント:
コメントを投稿