【问题标题】:Android - perform drag and drop programmaticallyAndroid - 以编程方式执行拖放
【发布时间】:2012-03-18 20:09:47
【问题描述】:

我想以编程方式拖动一个视图并将其释放到另一个视图之上以进行初始化,这可能吗?

编辑:我正在寻找一种模拟拖放的方法

【问题讨论】:

    标签: java android drag-and-drop


    【解决方案1】:

    您可以从布局中删除视图并将它们添加到其他布局(如果这是您要查找的内容)

    ViewGroup oldGroup = (ViewGroup) findViewById(R.id.some_layout);
    ViewGroup newGroup = (ViewGroup) findViewById(R.id.some_other_layout);
    
    Button button = (Button) oldGroup.findViewById(R.id.a_button);
    
    oldGroup.removeView(button);
    newGroup.addView(button);
    

    没有拖放动画,它可能会产生奇怪的结果,但有可能。

    ViewGroup 将是 LinearLayoutRelativeLayout 等等。


    为了模拟拖放事件,您可以手动调用 onDragListener,但有一个问题:

    public boolean onDrag(View v, DragEvent event);
    

    需要一个没有公共构造函数的DragEvent,所以你只能用null调用它

    可能有一种方法可以通过伪造的 Parcel 创建一个,但这会很丑。

    private void initializationTest() {
        DragEvent event = null;
        /* maybe sth like that
        Parcel source = Parcel.obtain();
        source.writeInt(1234);
        event  = DragEvent.CREATOR.createFromParcel(source);
        */
        onDrag(theTargetView, event);
    }
    

    另一种可能性是创建触摸事件,但如果这可行的话。至少monkey 可以做到这一点。

    【讨论】:

    • 非常感谢,出于方便的原因,我一直在寻找第二个答案,因为我的拖放侦听器已经完成了我需要做的所有事情,我只是不想太多冗余代码.由于似乎没有一个简单/优雅的解决方案,我可能不得不用另一种方式来做
    • 您可以稍微移动一下代码(在新方法中您需要两次的部分)以使其更优雅,这应该始终有效:)
    • 这正是我的想法和我最终所做的:)
    猜你喜欢
    • 2016-03-10
    • 1970-01-01
    • 2017-10-03
    • 1970-01-01
    • 1970-01-01
    • 2013-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多