2017-11-03 4 views
-3

私はAndroid開発の新人ですが、プログラミングに精通しています。私はいくつかの基礎を学んだ。フラグメント、私の最初のAndroidプロジェクトとしてOnClickListenersなどを、私は(下記)背景画像上に図形をドラッグアンドドロップすることができドラッグ&ドロップアプリケーションを作成したい初心者

  1. アプリを作成したいと思います
  2. はJPEGとして画像を保存し、それを保存します電話

誰もが、私はこれを達成し、また、適切なチュートリアルに私を指すように知っておくべき概念&ウィジェット教えてもらえますか?ここに行く好ましく動画

enter image description here

+0

が6.Outputが...のようになります。

[私はかなり類似した質問に答えていないが長すぎる前に](https://でのstackoverflow .com/questions/45802611 /ドラッグ・アンド・ドロップ方式のリサイクル・ビューロー・アンド・プレース・イット・イン・イット・イン/ 45812834#45812834)。 – adneal

答えて

1

。描画可能なフォルダの下に描画可能なフォルダの下 1.activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <LinearLayout 
     android:id="@+id/toplinear" 
     android:layout_width="fill_parent" 
     android:layout_height="170dp" 
     android:layout_marginBottom="10dp" > 

     <ImageView 
      android:id="@+id/image" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/a" /> 

    </LinearLayout> 

    <LinearLayout 
     android:id="@+id/bottomlinear" 
     android:layout_width="fill_parent" 
     android:layout_height="170dp" 
     > 

     <TextView 
      android:id="@+id/text" 
      android:layout_width="100dp" 
      android:layout_height="100dp" 
      android:text="Drag the image and drop it here..." /> 

    </LinearLayout> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:visibility="invisible" 
     android:id="@+id/save" 
     android:text="Save as file"/> 

</GridLayout> 

2.shapes.xml

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle" > 

    <stroke 
     android:width="2dp" 
     android:color="#FFFFFFFF" /> 

    <gradient 
     android:angle="225" 
     android:endColor="#DD2ECCFA" 
     android:startColor="#DD000000" /> 

    <corners 
     android:bottomLeftRadius="7dp" 
     android:bottomRightRadius="7dp" 
     android:topLeftRadius="7dp" 
     android:topRightRadius="7dp" /> 

</shape> 

3.target_shape.xml

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle" > 

    <stroke 
     android:width="2dp" 
     android:color="#FFFF0000" /> 

    <gradient 
     android:angle="225" 
     android:endColor="#DD2ECCFA" 
     android:startColor="#DD000000" /> 

    <corners 
     android:bottomLeftRadius="7dp" 
     android:bottomRightRadius="7dp" 
     android:topLeftRadius="7dp" 
     android:topRightRadius="7dp" /> 

</shape> 

4.MainActivity.java

public class MainActivity extends AppCompatActivity { 

    private ImageView myImage; 
    private static final String IMAGEVIEW_TAG = "The Android Logo"; 
    Button btn; 
    File file,f; 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_main); 
     myImage = (ImageView)findViewById(R.id.image); 
     // Sets the tag 
     myImage.setTag(IMAGEVIEW_TAG); 
     btn = (Button)findViewById(R.id.save); 

     // set the listener to the dragging data 
     myImage.setOnTouchListener(new MyClickListener()); 

     findViewById(R.id.toplinear).setOnDragListener(new MyDragListener()); 
     findViewById(R.id.bottomlinear).setOnDragListener(new MyDragListener()); 

     btn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       LinearLayout content = (LinearLayout)findViewById(R.id.bottomlinear); 
       content.setDrawingCacheEnabled(true); 
       Bitmap bitmap = content.getDrawingCache(); 


       if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) 
       { 
        file =new File(android.os.Environment.getExternalStorageDirectory(),"TTImages_cache"); 
        if(!file.exists()) 
        { 
         file.mkdirs(); 

        } 
        f = new File(file.getAbsolutePath()+file.separator+ "filename"+".png"); 
        Toast.makeText(getApplicationContext(),"File saved successfully",Toast.LENGTH_SHORT).show(); 
       } 

       try { 
        FileOutputStream ostream = new FileOutputStream(f); 
        bitmap.compress(Bitmap.CompressFormat.PNG, 10, ostream); 
        ostream.close(); 
       }catch (Exception e){ 
        e.printStackTrace(); 
        //Toast.makeText(getApplicationContext(),"Failed",Toast.LENGTH_SHORT).show(); 
       } 
      } 
     }); 

    } 

    private final class MyClickListener implements View.OnTouchListener { 


     @Override 
     public boolean onTouch(View view, MotionEvent motionEvent) { 
      ClipData.Item item = new ClipData.Item((CharSequence)view.getTag()); 

      String[] mimeTypes = { ClipDescription.MIMETYPE_TEXT_PLAIN }; 
      ClipData data = new ClipData(view.getTag().toString(), mimeTypes, item); 
      View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view); 

      view.startDrag(data, //data to be dragged 
        shadowBuilder, //drag shadow 
        view, //local data about the drag and drop operation 
        0 //no needed flags 
      ); 


      view.setVisibility(View.INVISIBLE); 
      return true; 
     } 

    } 

    class MyDragListener implements View.OnDragListener { 
     Drawable normalShape = getResources().getDrawable(R.drawable.shapes); 
     Drawable targetShape = getResources().getDrawable(R.drawable.shape_drop_target); 

     @Override 
     public boolean onDrag(View v, DragEvent event) { 

      // Handles each of the expected events 
      switch (event.getAction()) { 

       //signal for the start of a drag and drop operation. 
       case DragEvent.ACTION_DRAG_STARTED: 
        // do nothing 
        break; 

       //the drag point has entered the bounding box of the View 
       case DragEvent.ACTION_DRAG_ENTERED: 
        v.setBackground(targetShape); //change the shape of the view 
        break; 

       //the user has moved the drag shadow outside the bounding box of the View 
       case DragEvent.ACTION_DRAG_EXITED: 
        v.setBackground(normalShape); //change the shape of the view back to normal 
        break; 

       //drag shadow has been released,the drag point is within the bounding box of the View 
       case DragEvent.ACTION_DROP: 
        // if the view is the bottomlinear, we accept the drag item 
        if(v == findViewById(R.id.bottomlinear)) { 
         View view = (View) event.getLocalState(); 
         ViewGroup viewgroup = (ViewGroup) view.getParent(); 
         viewgroup.removeView(view); 

         //change the text 
         TextView text = (TextView) v.findViewById(R.id.text); 
         text.setText("The item is dropped"); 

         LinearLayout containView = (LinearLayout) v; 
         containView.addView(view); 
         btn.setVisibility(View.VISIBLE); 
         view.setVisibility(View.VISIBLE); 
        } else { 
         View view = (View) event.getLocalState(); 
         view.setVisibility(View.VISIBLE); 
         Context context = getApplicationContext(); 
         Toast.makeText(context, "You can't drop the image here", 
           Toast.LENGTH_LONG).show(); 
         break; 
        } 
        break; 

       //the drag and drop operation has concluded. 
       case DragEvent.ACTION_DRAG_ENDED: 
        v.setBackground(normalShape); //go back to normal shape 

       default: 
        break; 
      } 
      return true; 
     } 
    } 
} 

5.AndroidManifest.xmlは許可の下に追加

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

enter image description here

+0

これはあなたが探していたものですか? – androidOnHigh

+0

これは本当に良いですが、私はこのコードをすべて説明するチュートリアルを探していたがっています。 – Zolly

+0

この例でもクエリが解決された場合は、回答を受け入れることができますか? – androidOnHigh