首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >拖拽图像?

拖拽图像?
EN

Stack Overflow用户
提问于 2012-01-27 16:39:36
回答 2查看 367关注 0票数 2

我正在尝试做一些应用程序,这必须解锁时,用户移动图像到某个地方…但问题是,当用户触摸图像以外的其他地方时,它仍然会尝试移动,并给出这个错误: java.lang.ClassCastException: android.widget.AbsoluteLayout$LayoutParams

下面是我的代码:

公共类Main扩展了Activity {

代码语言:javascript
复制
private View selected_item;
private int offset_x = 0;
private int offset_y = 0;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    final ViewGroup vg = (ViewGroup) findViewById(R.id.lout);

    vg.setOnTouchListener(new View.OnTouchListener() {

        @SuppressWarnings("deprecation")
        public boolean onTouch(View v, MotionEvent event) {
                      switch (event.getAction()) {                          
                      case MotionEvent.ACTION_MOVE:
                          int x = (int) event.getX() - offset_x;
                          int y = (int) event.getY() - offset_y;
                          Log.e("SONUC", "SONUC1: " + x + ", " + y);
                          int w = getWindowManager().getDefaultDisplay().getWidth() - 25;
                          int h = getWindowManager().getDefaultDisplay().getHeight() - 25;
                          if (x > w)
                              x = w;
                          if (y > h)
                              y = h;
                          Log.e("SONUC", "SONUC2: " + x + ", " + y);
                          AbsoluteLayout.LayoutParams lp = new AbsoluteLayout.LayoutParams(
                                  new ViewGroup.MarginLayoutParams(
                                          AbsoluteLayout.LayoutParams.WRAP_CONTENT,
                                          AbsoluteLayout.LayoutParams.WRAP_CONTENT));                              
                          lp.x = x;
                          lp.y = y;
                          Log.e("SONUC", "SONUC3: " + lp);
                          selected_item.setLayoutParams(lp);       

                          break;

                      case MotionEvent.ACTION_UP:
                          offset_x = (int) event.getX() - offset_x;
                          offset_y = (int) event.getY() - offset_y;
                          Log.e("SONUC", "SONUC5: " + offset_x + ", " + offset_y);
                          selected_item = v;
                          if (offset_x < 220 && offset_x > 150 && offset_y < 330 && offset_y > 300)
                              startActivity(new Intent("com.yahya.GeneralTraining.UNLOCKED"));
                          break;

            default:
                break;
            }
            return true;
        }
    });

    ImageView img = (ImageView) findViewById(R.id.imageView1);
    img.setOnTouchListener(new View.OnTouchListener() {

        public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction()) {

            case MotionEvent.ACTION_DOWN:
                offset_x = (int) event.getX();
                offset_y = (int) event.getY();
                Log.e("SONUC", "SONUC4: " + offset_x + ", " + offset_y);                    
                selected_item = v;
                break;


            default:
                break;
            }
            return false;

        }
    });

}

}

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-30 20:15:58

您可以在viewgroup的onTouchListener中提供检查,以确认最初单击了该图像。

代码语言:javascript
复制
vg.setOnTouchListener(new View.OnTouchListener() {

    @SuppressWarnings("deprecation")
    public boolean onTouch(View v, MotionEvent event) {
                if(selected_item.getId() == R.id.image){
                    switch (event.getActionMasked()) {
                      //your code
                    }
                }
        }
        return true;
    }
});
票数 2
EN

Stack Overflow用户

发布于 2012-01-30 19:40:11

第一件事不要创建LayoutParam的新对象,只需从容器中获取LayoutParam对象,如图像或布局

假设获取ImageView,然后

代码语言:javascript
复制
LayoutParam lp = imageView.getLayoutParam();

lp.width = newWidth;
lp.height = newHeight;

现在更改大小并在imageView.setLayoutParam()中设置它

代码语言:javascript
复制
imageView.setLayoutParam(lp);

另一件事是,您还为ViewGroup设置了触摸侦听器,仅为ImageView设置了触摸侦听器,而没有为ViewGroup设置触摸侦听器,并且在触摸侦听器实现中,返回true以指示触摸侦听器已实现

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9030742

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档