This tutorial will help to resize a custom view by dragging of view's side and provide drag functionality also. Here is the step by step code.
Step 1- Create a xml file res/activity_main
<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:orientation="vertical" ;
Button
android:id="@+id/button"
android:layout_width="200dp"
android:layout_height="100dp"
android:text="Button View" ;
AbsoluteLayout
android:id="@+id/boardLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/board"
android:gravity="center"
android:padding="20dp";
Step 2- Create a activity
import android.app.Activity;
import android.content.ClipData;
import android.os.Bundle;
import android.util.Log;
import android.view.DragEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.AbsoluteLayout;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.RelativeLayout;
public class DragDrop extends Activity implements OnLongClickListener,
View.OnDragListener,OnClickListener,OnTouchListener{
private View imageView;
private int height;
private int width;
private AbsoluteLayout boardLayout;
private View layout;
private RelativeLayout relativeLayoutrectangleView;
private ImageView triangleView,circleView,rectangleView;
private String IMAGE_RECTANGLE = "RECTANGLE";
//boolean drag;
float X,Y;
boolean temp;
private AbsoluteLayout absoluteLayout,absoluteLayout2;
private AbsoluteLayout containView ;
private Button button;
int heightlayout,widthlayout;
private float newX = 0;
private float newY = 0;
private float oldX = 0;
private float oldY = 0;
private float dX = 0;
private float dY = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// set OnDragListener on the view where to drop the dragged item
boardLayout=(AbsoluteLayout)findViewById(R.id.boardLayout);
boardLayout.setOnDragListener(this);
button=(Button)findViewById(R.id.button);
button.setOnClickListener(this);
}
@Override
public boolean onDrag(View v, DragEvent event) {
// Defines a variable to store the action type for the incoming
// event
final int action = event.getAction();
// Handles each of the expected events
switch (action) {
case DragEvent.ACTION_STARTED:
// Invalidate the view to force a redraw in the new tint
v.invalidate();
// dragged data.
return true;
case DragEvent.ACTION_DRAG_ENTERED:
// Invalidate the view to force a redraw in the new tint
v.invalidate();
return false;
case DragEvent.ACTION_LOCATION:
X = event.getX();
Y = event.getY();
if(X>widthlayout && Y>heightlayout){
temp = true;
}
// Ignore the event
return false;
case DragEvent.ACTION_DRAG_EXITED:
//v.invalidate();
return false;
case DragEvent.ACTION_DROP:
// Gets the item containing the dragged data
ClipData dragData = event.getClipData();
// Gets the text data from the item.
final String tag = dragData.getItemAt(0).getText().toString();
View view = (View) event.getLocalState();
ViewGroup viewgroup = (ViewGroup) view.getParent();
viewgroup.removeView(view);
X = event.getX();
Y = event.getY();
view.setX(X-(view.getWidth()/2));
view.setY(Y-(view.getHeight()/2));
containView = (AbsoluteLayout) v;
containView.addView(view);
view.setVisibility(View.VISIBLE);
// Invalidates the view to force a redraw
v.invalidate();
// Returns true. DragEvent.getResult() will return true.
return true;
case DragEvent.ACTION_DRAG_ENDED:
//drag=false;
v.invalidate();
return false;
default:
break;
}
return false;
}
@Override
public boolean onLongClick(View v) {
String tag = v.getTag().toString();
ClipData dragData = ClipData.newPlainText("TAG", tag);
// Instantiates the drag shadow builder.
View.DragShadowBuilder myShadow = null;
//v.setBackgroundResource(0);
if(tag.equals(IMAGE_RECTANGLE)){
v.setVisibility(View.INVISIBLE);
myShadow = new View.DragShadowBuilder(relativeLayoutrectangleView);
}
// Starts the drag
v.startDrag(dragData, myShadow, v, 0);
return false;
}
@Override
public void onClick(View v) {
createCustomView();
}
private void createCustomView() {
absoluteLayout=new AbsoluteLayout(this);
absoluteLayout.setLayoutParams(new LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
relativeLayoutrectangleView = new RelativeLayout(this);
relativeLayoutrectangleView.setLayoutParams(new LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
relativeLayoutrectangleView.getLayoutParams().height=100;
relativeLayoutrectangleView.getLayoutParams().width=100;
rectangleView=new ImageView(this);
rectangleView.setLayoutParams(new LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
relativeLayoutrectangleView.setTag(IMAGE_RECTANGLE);
rectangleView.getLayoutParams().height=300;
rectangleView.getLayoutParams().width=300;
rectangleView.setImageResource((R.drawable.rectangle));
relativeLayoutrectangleView.setOnLongClickListener(this);
relativeLayoutrectangleView.setBackgroundResource(R.drawable.rectangle);
relativeLayoutrectangleView.setOnTouchListener(this);
ViewGroup.LayoutParams la_pm = rectangleView.getLayoutParams();
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(la_pm);
//relativeLayoutrectangleView.addView(rectangleView,lp);
absoluteLayout.addView(relativeLayoutrectangleView);
boardLayout.addView(absoluteLayout);
}
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_DOWN){
width =v.getWidth()/2;
height =v.getHeight()/2;
// Construct a rect of the view's bounds
oldX=event.getX();
oldY=event.getY();
Log.d("oldX", oldX+"");
Log.d("oldY", oldY+"");
//Log.d("height and width", height+"" + width+"");
}
if(event.getAction() == MotionEvent.ACTION_MOVE){
newX=event.getX();
newY=event.getY();
dX=newX-oldX;
dY=newY-oldY;
if(oldX>width){
if(newX>oldX){
AbsoluteLayout.LayoutParams params = (AbsoluteLayout.LayoutParams) v.getLayoutParams();
// relativeLayoutcircleView.getLayoutParams().height=relativeLayoutcircleView.getHeight()-50;
v.getLayoutParams().width=v.getWidth()+Math.abs((int)dX);
v.setLayoutParams(params);
}else if(newX>oldX){
AbsoluteLayout.LayoutParams params = (AbsoluteLayout.LayoutParams) v.getLayoutParams();
// relativeLayoutcircleView.getLayoutParams().height=relativeLayoutcircleView.getHeight()-50;
v.getLayoutParams().width=v.getWidth()-Math.abs((int)dX);
v.setLayoutParams(params);
}
//if(dX==0){
if(newY>height){
if(dY>0){
Log.d("size of HEIGHT", "increaseingggggggg");
AbsoluteLayout.LayoutParams params = (AbsoluteLayout.LayoutParams) v.getLayoutParams();
// relativeLayoutcircleView.getLayoutParams().height=relativeLayoutcircleView.getHeight()-50;
v.getLayoutParams().height=v.getHeight()+Math.abs((int)dY);
v.setLayoutParams(params);
}else if(dY<0 ){
AbsoluteLayout.LayoutParams params = (AbsoluteLayout.LayoutParams) v.getLayoutParams();
// relativeLayoutcircleView.getLayoutParams().height=relativeLayoutcircleView.getHeight()-50;
v.getLayoutParams().height=v.getHeight()-Math.abs((int)dY);
v.setLayoutParams(params);
}
}
else if(newY0){
AbsoluteLayout.LayoutParams params = (AbsoluteLayout.LayoutParams) v.getLayoutParams();
// relativeLayoutcircleView.getLayoutParams().height=relativeLayoutcircleView.getHeight()-50;
v.getLayoutParams().height=v.getHeight()-Math.abs((int)dY);
v.setLayoutParams(params);
}else if(dY<0){
AbsoluteLayout.LayoutParams params = (AbsoluteLayout.LayoutParams) v.getLayoutParams();
// relativeLayoutcircleView.getLayoutParams().height=relativeLayoutcircleView.getHeight()-50;
v.getLayoutParams().height=v.getHeight()+Math.abs((int)dY);
v.setLayoutParams(params);
}
}
//}
}else if(oldXheight){
if(dY>0){
AbsoluteLayout.LayoutParams params = (AbsoluteLayout.LayoutParams) v.getLayoutParams();
// relativeLayoutcircleView.getLayoutParams().height=relativeLayoutcircleView.getHeight()-50;
v.getLayoutParams().height=v.getHeight()+Math.abs((int)dY);
v.setLayoutParams(params);
}else if(dY<0 ){
AbsoluteLayout.LayoutParams params = (AbsoluteLayout.LayoutParams) v.getLayoutParams();
// relativeLayoutcircleView.getLayoutParams().height=relativeLayoutcircleView.getHeight()-50;
v.getLayoutParams().height=v.getHeight()-Math.abs((int)dY);
v.setLayoutParams(params);
}
}
else if(newY0){
Log.d("size of HEIGHT", "decreaseingggggggg");
AbsoluteLayout.LayoutParams params = (AbsoluteLayout.LayoutParams) v.getLayoutParams();
// relativeLayoutcircleView.getLayoutParams().height=relativeLayoutcircleView.getHeight()-50;
v.getLayoutParams().height=v.getHeight()-Math.abs((int)dY);
v.setLayoutParams(params);
}else if(dY<0){
AbsoluteLayout.LayoutParams params = (AbsoluteLayout.LayoutParams) v.getLayoutParams();
// relativeLayoutcircleView.getLayoutParams().height=relativeLayoutcircleView.getHeight()-50;
v.getLayoutParams().height=v.getHeight()+Math.abs((int)dY);
v.setLayoutParams(params);
}
}
}// end of dx==0 if
else{
if(newX>oldX){
if(dX>0){
AbsoluteLayout.LayoutParams params = (AbsoluteLayout.LayoutParams) v.getLayoutParams();
// relativeLayoutcircleView.getLayoutParams().height=relativeLayoutcircleView.getHeight()-50;
v.getLayoutParams().width=v.getWidth()-Math.abs((int)dX);
v.setLayoutParams(params);
}
}else if(newX
2 Comment(s)