drag and drop imageview android

10,034

Check the follow posts:

And also, other questions: Drag and drop images in android

And finally, if you are creating an app for API Level >= 11 you should use this: Drag and Drop Android Page

But first of all, remember: NEVER uses AbsoluteLayout

Share:
10,034
Siddhpura Amit
Author by

Siddhpura Amit

I am Sr. Software Developer.

Updated on June 11, 2022

Comments

  • Siddhpura Amit
    Siddhpura Amit about 2 years

    I am currently developing one game! In that there is a frame layout in that there is one HorizontalView and One in VerticalView and AbsoluteLayout and in Absolutelayout is at Top Right in that there is a ImageView

    Now In HorizontalView and VerticalView there is a list of dresses of images. when i click on that image the of dress will be added to the Abosolute layout.. And in imageView there is a one cartoon.. now i can drag and drop that dress into this cartoon

    for that XML code is

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/pink_bg" >
    
    
    
    <ListView android:id="@+id/vlistview"
        android:layout_alignParentTop="true"
        android:layout_width="60dp"
        android:layout_marginBottom="60dp"
        android:layout_height="wrap_content"
        android:scrollingCache="false"/>
    
    <com.devsmart.android.ui.HorizontalListView
        android:id="@+id/hlistview"
        android:layout_alignParentBottom="true"
        android:layout_width="fill_parent"
        android:layout_height="60dp"
        />
    
    <AbsoluteLayout
        android:id="@+id/frameLayout"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_marginBottom="60dp"
        android:layout_marginLeft="60dp"
        android:padding="10dp" >
    
             <ImageView
                 android:id="@+id/imgKitty"
                 android:layout_width="fill_parent"
                 android:layout_height="fill_parent"
                 android:src="@drawable/hk1" />
    
    </AbsoluteLayout>
    

    Now the code is

      public class MainActivityAbs extends Activity implements OnClickListener, OnTouchListener {
    int images1[], images2[];
    static int imgKittyNo = 0;
    static int kittyStatus = 0;
    int[] kitties;
    ImageView imgKitty;
    ImageView mKittyDress;
    private AbsoluteLayout mKittyBGLayer;
    ArrayList<ImageView> mArrayList = new ArrayList<ImageView>();
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        kitties = new int[] { R.drawable.hk1, R.drawable.hk2, R.drawable.hk3, R.drawable.hk4, R.drawable.hk5 };
    
        images1 = new int[] { R.drawable.hk_a1, R.drawable.hk_a2, R.drawable.hk_a3, R.drawable.hk_a4, R.drawable.hk_a5, R.drawable.hk_a6,
                R.drawable.hk_a7, R.drawable.hk_a8, R.drawable.hk_dress, R.drawable.hk_dress, R.drawable.hk_dress2, R.drawable.hk_dress3,
                R.drawable.hk_dress4, R.drawable.hk_dress5, R.drawable.hk_dress6, R.drawable.hk_dress7, R.drawable.hk_dress8, R.drawable.hk_dress9,
                R.drawable.hk_dress10, R.drawable.hk_dress11, R.drawable.hk_dress12, R.drawable.hk_dress13, R.drawable.hk_dress14,
                R.drawable.hk_dress15, R.drawable.hk_dress16, R.drawable.hk_dress17, R.drawable.hk_dress18, R.drawable.hk_dress19,
                R.drawable.hk_dress20, R.drawable.hk_dress21 };
    
        images2 = new int[] { R.drawable.hk_flo, R.drawable.hk_flo2, R.drawable.hk_glasses, R.drawable.hk_glasses2, R.drawable.hk_glasses3,
                R.drawable.hk_hair1, R.drawable.hk_hair2, R.drawable.hk_hair3, R.drawable.hk_hair4, R.drawable.hk_hair5, R.drawable.hk_hat1,
                R.drawable.hk_hat2, R.drawable.hk_hat3, R.drawable.hk_hat4, R.drawable.hk_hat5, R.drawable.hk_hat6, R.drawable.hk_ribon1,
                R.drawable.hk_ribon2, R.drawable.hk_ribon3, R.drawable.hk_ribon4, R.drawable.hk_ribon5, R.drawable.hk_ribon6, R.drawable.hk_ribon7,
                R.drawable.hk_ribon8, R.drawable.hk_ribon9, R.drawable.hk_ribon10, R.drawable.hk_ring, R.drawable.hk_glasses, R.drawable.hk_glasses2,
                R.drawable.hk_glasses3 };
    
        ListView vListView = (ListView) findViewById(R.id.vlistview);
        vListView.setAdapter(new VAdapter(this));
    
        HorizontalListView hListView = (HorizontalListView) findViewById(R.id.hlistview);
        hListView.setAdapter(new HAdapter(this));
        imgKitty = (ImageView) findViewById(R.id.imgKitty);
        // imgKitty.setOnClickListener(this);
        mKittyBGLayer = (AbsoluteLayout) findViewById(R.id.frameLayout);
        setupViews(kitties[0]);
    
    
        vListView.setOnItemClickListener(new OnItemClickListener() {
    
            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
                setupViews(images2[arg2]);
            }
    
        });
    
        hListView.setOnItemClickListener(new OnItemClickListener() {
    
            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
                setupViews(images1[arg2]);
            }
    
        });
    
        /*imgKitty.setOnClickListener(new View.OnClickListener() {
    
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                System.out.println("ImgKitty is called");
            }
        });*/
        mKittyBGLayer.setOnTouchListener(new OnTouchListener() {
            public boolean onTouch(View v, MotionEvent event) {
                for (ImageView img1 : mArrayList) {
                    if (kittyStatus == img1.getId()) {
                        mKittyDress = img1;
                        break;
                    }
                }
                if(mKittyDress!=null) {
                LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, (int) event.getX() - mKittyDress.getWidth()
                        / 2, (int) event.getY() - mKittyDress.getHeight() / 2);
                mKittyDress.setLayoutParams(lp);
                }
                return true;
            }
        });
    
        final ImageView imgClearAll = (ImageView)findViewById(R.id.imgClearAll);
        imgClearAll.setOnClickListener(new OnClickListener() {
    
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                if(mKittyBGLayer!=null && mArrayList!=null)
                {
                    mKittyBGLayer.removeAllViews();
                    mKittyBGLayer.addView(imgKitty);
                    mArrayList.clear();
                }
    
            }
        });
    
    }
    
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        boolean isKitty = false;
        for (int i = 0; i < kitties.length; i++) {
            if (v.getId() == kitties[i]) {
                isKitty =true;
            }
        }
        if(!isKitty)
            kittyStatus = v.getId();
        return false;
    }
    
    private void setupViews(int args) {
    
        if (args == R.drawable.hk1 || args == R.drawable.hk2 || args == R.drawable.hk3 || args == R.drawable.hk4 || args == R.drawable.hk5
                || args == R.drawable.hk6) {
            imgKitty.setImageResource(args);
        } else {
    
            mKittyDress = new ImageView(this);
            mKittyDress.setImageResource(args);
            mKittyDress.setId(imgKittyNo++);
            mKittyDress.setOnTouchListener(MainActivityAbs.this);
            mArrayList.add(mKittyDress);
            mKittyBGLayer.addView(mKittyDress);
        }
    
    }
    
    
    private class HAdapter extends BaseAdapter {
    
        private Context context;
        LayoutInflater inflater;
    
        public HAdapter(Context context) {
            // TODO Auto-generated constructor stub
            this.context = context;
            inflater = LayoutInflater.from(context);
    
        }
    
        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return images1.length;
        }
    
        @Override
        public Object getItem(int position) {
            // TODO Auto-generated method stub
            return position;
        }
    
        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return position;
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            HViewHolder holder;
            if (convertView == null) {
                convertView = inflater.inflate(R.layout.listinflate, null);
                holder = new HViewHolder();
                convertView.setTag(holder);
    
            } else {
                holder = (HViewHolder) convertView.getTag();
            }
            holder.img = (ImageView) convertView.findViewById(R.id.image);
            holder.img.setImageResource(images1[position]);
            return convertView;
        }
    
    }
    
    class HViewHolder {
        ImageView img;
    }
    
    
    
    private class VAdapter extends BaseAdapter {
    
        private Context context;
        LayoutInflater inflater;
    
        public VAdapter(Context context) {
            // TODO Auto-generated constructor stub
            this.context = context;
            inflater = LayoutInflater.from(context);
    
        }
    
        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return images2.length;
        }
    
        @Override
        public Object getItem(int position) {
            // TODO Auto-generated method stub
            return position;
        }
    
        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return position;
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder holder;
            if (convertView == null) {
                convertView = inflater.inflate(R.layout.listinflate, null);
                holder = new ViewHolder();
                convertView.setTag(holder);
    
            } else {
                holder = (ViewHolder) convertView.getTag();
            }
            holder.img = (ImageView) convertView.findViewById(R.id.image);
            holder.img.setImageResource(images2[position]);
    
            return convertView;
        }
    
    }
    
    class ViewHolder {
        ImageView img;
    }
    
    @Override
    public void onClick(View v) {
         }
    

    Now all are done successfully with above code but when i also want that if i click on Top|Right image of boy, the image should also change, Mean there is different kind of boy they should also change when i click on that boy... I have tried so much but could not get it please any body can help me,