问题
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,
回答1:
Check the follow posts:
- http://codingjunkie.net/android-drag-and-drop-part1/
- http://www.vogella.com/articles/AndroidDragAndDrop/article.html
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
来源:https://stackoverflow.com/questions/12368791/drag-and-drop-imageview-android