在我的应用程序中,我想使用拖动来更改图像。以下是我的活动的屏幕截图。在这个屏幕上有 4 张图像。我想交换总图像。例如,当我触摸第一张图像(facebook)并将图像拖到任何图像示例第二张图像附近时(推特)然后交换图像,如第一个图像设置为第二位,第二个图像设置为第一个位置。并且还交换上面的 4 个图像。在第一位置,无论是 facebook 和 twitter 图像,还是第二位和第三位位和第四位。我在foue的任何地方设置了8张图像。我完成了这个任务。唯一的问题是如何拖动图像并将图像设置到任意三个位置。
我为完成这项任务做了很多尝试。这是我的代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main1);
ivFacebook1=(ImageView)findViewById(R.id.facebook1);
ivFacebook2=(ImageView)findViewById(R.id.facebook2);
ivFacebook3=(ImageView)findViewById(R.id.facebook3);
ivFacebook4=(ImageView)findViewById(R.id.facebook4);
ivTwitter1=(ImageView)findViewById(R.id.twitter1);
ivTwitter2=(ImageView)findViewById(R.id.twitter2);
ivTwitter3=(ImageView)findViewById(R.id.twitter3);
ivTwitter4=(ImageView)findViewById(R.id.twitter4);
ivFacebook1.setOnTouchListener(this);
ivFacebook2.setOnTouchListener(this);
ivFacebook3.setOnTouchListener(this);
ivFacebook4.setOnTouchListener(this);
ivTwitter1.setOnTouchListener(this);
ivTwitter2.setOnTouchListener(this);
ivTwitter3.setOnTouchListener(this);
ivTwitter4.setOnTouchListener(this);
}
这是我的ontouch:
@Override
public boolean onTouch(View v, MotionEvent event){
ImageView view = (ImageView) v;
Log.e("id",""+v.getId());
Log.e("ontouch","workkkkkkk");
float scale;
boolean moving = false;//stupid state
switch (event.getAction() & MotionEvent.ACTION_MASK){
case MotionEvent.ACTION_DOWN:
final int x = (int)event.getX();
final int y = (int)event.getY();
Log.e("x,y",""+x+","+y);
if((layout1.getLeft()<x)&&(x<layout1.getRight())&&((layout1.getTop()<y)&&(y<layout1.getBottom()))) {
viewnumber=1;
Log.e("View1","in View1");
}
if((layout2.getLeft()<x)&&(x<layout2.getRight())&&((layout2.getTop()<y)&&(y<layout2.getBottom()))){
viewnumber=2;
Log.e("View2","in View2");
}
if((layout3.getLeft()<x)&&(x<layout3.getRight())&&((layout3.getTop()<y)&&(y<layout3.getBottom()))){
viewnumber=3;
Log.e("View3","in View3");
}
if((layout4.getLeft()<x)&&(x<layout4.getRight())&&((layout4.getTop()<y)&&(y<layout4.getBottom()))) {
viewnumber=4;
Log.e("View4","in View4");
}
ClipData data = ClipData.newPlainText("", "");
DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
view.startDrag(data, shadowBuilder, view, 0);
view.setVisibility(View.INVISIBLE);
return true;
case MotionEvent.ACTION_MOVE:
Log.e("action move","moveeeeeeeeee");
case MotionEvent.ACTION_UP:
moving = false;
return true;
}
return true;
}//ontouch.
通过使用此代码,四个图像可以正常拖动。当我按下手指并拖动图像时,图像工作正常。但是在我抬起手指时在拖动之间,图像就会消失。并且图像也没有设置。