【问题标题】:Img(ImageView) moving randomly within screen with onTouch onDrag listenerImg(ImageView) 使用 onTouch onDrag 监听器在屏幕内随机移动
【发布时间】:2017-01-05 15:30:55
【问题描述】:

编辑:我想要完成的内容的 Cliffnote 开门见山, 我的 XML 设置有 2 个线性视图(顶部,底部) 1.我希望我的img在移动时留在屏幕内 2. 连续随机移动 3.让它可点击/可拖动 4. 让 img 得到它的新位置并移动到它掉落的任何地方(顶部或底部) 谢谢。

您好,为自闭症儿童制作应用程序 (Android Studio)(灵感来自我的自闭症儿子)。在我的活动中,我有 2 个线性布局:顶部和底部。顶部是我屏幕 3/4 的位置,有 4 张图像。底部是应放置“答案”或 img 的目标放置点。

我在 a 中随机创建了 4 个 img(通过 databaseFP 迭代),但现在我希望这些 img 在屏幕(顶部屏幕)内随机移动并将它们拖到目标拖动框(底部屏幕)中。四个 img 中只有 1 个是正确的“答案”,所以如果它的“不正确”,我希望这个 img 返回到其在屏幕内一直移动的位置,直到将“正确”的 img 选择到目标下拉框。仅此而已...请帮助我,我已经阅读了很多书,而不是特别喜欢涉及 onTouch/onDrag 侦听器的地方,并且如果拖动,img 会返回位置。

到目前为止,我所做的只是让 img 移动(它保留了点击和拖动,但当它不正确时它会离开屏幕)请参阅下面的代码

DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int width = displaymetrics.widthPixels;
int height = displaymetrics.heightPixels;

Random r = new Random();

int distance = 100; //the distance to move in pixels
int duration = 500; //the duration of the animation in ms

double direction = Math.random() * 2 * Math.PI;

int translationX = (int) (Math.cos(direction) * distance);
int translationY = (int) (Math.sin(direction) * distance);
int id2 = getResources().getIdentifier(myShuffledArray[0], "drawable", getPackageName());
image.setImageResource(id2);
image.animate().translationX(translationX - width).translationY(translationY - height).setDuration(duration).start();

我是新手,但这会帮助我患有自闭症的儿子,这是我大学的论文项目。

编辑这是我的 ontouch/drag

 public boolean onDrag(View v, DragEvent event) {
    // TODO Auto-generated method stub
    if(event.getAction()==DragEvent.ACTION_DROP){
        //we want to make sure it is dropped only to left and right parent view
        View view = (View)event.getLocalState();
        //if(v.getId() == R.id.left_view || v.getId() == R.id.right_view){
            if(view.getId() == R.id.box_view1){
                ViewGroup source = (ViewGroup) view.getParent();
                source.removeView(view);
                LinearLayout target = (LinearLayout) v;
                target.addView(view);
            }
            //make view visible as we set visibility to invisible while starting drag
            view.setVisibility(View.VISIBLE);
        }
        return true;
    }

@Override
public boolean onTouch(View view, MotionEvent event) {
    // TODO Auto-generated method stub
    if(event.getAction() == MotionEvent.ACTION_DOWN){
        DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
        view.startDrag(null, shadowBuilder, view, 0);
        view.setVisibility(View.INVISIBLE);
        return true;
    }
    return false;
}

【问题讨论】:

  • 那么您遇到了哪些问题?你的问题有点啰嗦
  • 我只是无法让 img 在屏幕内连续移动....加上当它被触摸并且 img 不正确时,我希望它保持其位置以继续移动。目前 img 完全消失了......我从刚刚实施到我的项目的其他问题中得到的这段代码。

标签: android random drag-and-drop onclick imageview


【解决方案1】:

我找到了这个网站上发布的解决方案 https://blahti.wordpress.com/2011/01/17/moving-views-part-2/ 想要了解更多关于视图和拖放的信息,请查看它

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-07
    • 2020-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-17
    • 1970-01-01
    相关资源
    最近更新 更多