Wednesday, 4 March 2015

Android Drag And Drop Example

Drag and Drop is one of the best feature provided by the Android Developer API. It can be used to drag data from a view and drop it in another view. In this Tutorial we are going to see how to implement Drag and Drop feature in a Android Application. In this we are going to count the total number of drops and number of successful drops.

Example:

main.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical" >

    <LinearLayout

        android:id="@+id/bottomlinear"
        android:layout_width="match_parent"
        android:layout_height="400px"
        android:background="#00ff00"
        android:gravity="center"
        android:orientation="vertical" >

        <Button

            android:id="@+id/one"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Drag Me"
            android:textSize="30sp" />
    </LinearLayout>

    <LinearLayout

        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#29166f"
        android:gravity="center"
        android:orientation="vertical" >

        <TextView

            android:id="@+id/drop"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Drop Here"
            android:textSize="30sp" />

        <TextView

            android:id="@+id/Total"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="20sp" />

        <TextView

            android:id="@+id/Sucess"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="20sp" />

        <TextView

            android:id="@+id/text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="20sp" />

        <TextView

            android:id="@+id/website"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceLarge" />
    </LinearLayout>

</LinearLayout>


DnDActivity:


import android.app.Activity;

import android.content.ClipData;
import android.content.Intent;
import android.os.Bundle;
import android.view.DragEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
public class DnDActivity extends Activity 
{
Button drag;
LinearLayout drop;
TextView text, sucess;
int total, failure = 0;
private TextView Website;
private TextView text_click;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
drag = (Button) findViewById(R.id.one);
drop = (LinearLayout) findViewById(R.id.bottomlinear);
text = (TextView) findViewById(R.id.Total);
sucess = (TextView) findViewById(R.id.Sucess);
Website = (TextView) findViewById(R.id.website);
text_click = (TextView) findViewById(R.id.text);
Website.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
      Intent i=new Intent(DnDActivity.this,SecondActivity.class);
         startActivity(i);
}
});
drop.setOnDragListener(new View.OnDragListener() {
@Override
public boolean onDrag(View v, DragEvent event) {
// TODO Auto-generated method stub
final int action = event.getAction();
switch (action)
 {
case DragEvent.ACTION_DRAG_STARTED:
break;
case DragEvent.ACTION_DRAG_EXITED:
break;
case DragEvent.ACTION_DRAG_ENTERED:
break;
case DragEvent.ACTION_DROP: {
failure = failure + 1;
return (true);
}
case DragEvent.ACTION_DRAG_ENDED: {
total = total + 1;
int suc = total - failure;
sucess.setText("Sucessful Drops :" + suc);
text.setText("Total Drops: " + total);
text_click.setText("Click on the Url");
Website.setText("http://saravananandroid.blogspot.in/");
return (true);
}
default:
break;
}
return true;
}
});
drag.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent arg1) {
// TODO Auto-generated method stub
ClipData data = ClipData.newPlainText("", "");
View.DragShadowBuilder shadow = new View.DragShadowBuilder(drag);
v.startDrag(data, shadow, null, 0);
return false;
}
});
}

}


activity_second.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    <WebView
        android:id="@+id/webview01"
        android:layout_width="fill_parent"
        android:layout_height="match_parent" >
    </WebView>
</LinearLayout>

SecondActivity.Java:


import android.app.Activity;

import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.os.Handler;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class SecondActivity extends Activity 
{
ProgressDialog mProgress;
WebView web;
// flag for Internet connection status
Boolean isInternetPresent = false;
// Connection detector class
ConnectionDetector cd;
ProgressDialog ProgDialog;
Handler handler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
try {
web = (WebView) findViewById(R.id.webview01);
// creating connection detector class instance
cd = new ConnectionDetector(getApplicationContext());
// get Internet status
isInternetPresent = cd.isConnectedToInternet();
// Asynchronous Task
if (isInternetPresent)
loadData();
else
AlertMessageDialog(SecondActivity.this,
"No Internet Connection", "Drag And Drop");

catch (Exception e) {
System.out.println(e);
}

}

public class myWebClient extends WebViewClient {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
// TODO Auto-generated method stub
super.onPageStarted(view, url, favicon);

}


@Override

public boolean shouldOverrideUrlLoading(WebView view, String url)
                {
// TODO Auto-generated method stub
                        view.loadUrl(url);
return true;

}


@Override

public void onPageFinished(WebView view, String url) {
// TODO Auto-generated method stub

super.onPageFinished(view, url);

if (mProgress.isShowing()) {
mProgress.dismiss();
}
}
}

public void loadData() {

try {
web.setWebViewClient(new myWebClient());
web.getSettings().setJavaScriptEnabled(true);
mProgress = new ProgressDialog(SecondActivity.this);
mProgress.setMessage("Loading...");
mProgress.setIndeterminate(false);
mProgress.setCancelable(false);
mProgress.show();
web.loadUrl("http://saravananandroid.blogspot.in/");
} catch (Exception e) {
System.out.println(e);
}
}

// alert dialog

public void AlertMessageDialog(final Activity a, final String text,final String title)
 {
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(a);
// set title
alertDialogBuilder.setTitle(title);
// set dialog message
alertDialogBuilder
.setMessage(text)
.setCancelable(false)
.setPositiveButton("Try Again",
   new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
ProgDialog = new ProgressDialog(SecondActivity.this);
ProgDialog.setMessage("Fetching Connection...");
ProgDialog.setIndeterminate(false);
ProgDialog.setCancelable(false);
ProgDialog.show();
handler = new Handler();
handler.postDelayed(r, 5000);
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
// create alert dialog
AlertDialog alertDialog = alertDialogBuilder.create();
// show it
alertDialog.show();
}

Runnable r = new Runnable() {

@Override
public void run() {
ProgDialog.cancel();
isInternetPresent = cd.isConnectedToInternet();
// Asynchronous Task
if (isInternetPresent) {
handler.removeCallbacks(r);
loadData();
} else
AlertMessageDialog(SecondActivity.this,
"No Intenrnet Connection", "Drag And Drop");
}
};

}



ConnectionDetector.java:

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
public class ConnectionDetector {
     
    private Context _context;
     
    public ConnectionDetector(Context context){
        this._context = context;
    }
    public boolean isConnectedToInternet(){
        ConnectivityManager connectivity = (ConnectivityManager) _context.getSystemService(Context.CONNECTIVITY_SERVICE);
          if (connectivity != null) 
          {
              NetworkInfo[] info = connectivity.getAllNetworkInfo();
              if (info != null) 
                  for (int i = 0; i < info.length; i++) 
                      if (info[i].getState() == NetworkInfo.State.CONNECTED)
                      {
                          return true;
                      }
          }
          return false;
    }
}

Result:








No comments:

Post a Comment