如何在Android中移动多个视图?

潜移默化

当我实现了触摸式触摸时,我有两个图像视图,只有一个视图能够移动整个布局,而其他图像视图却保持在固定位置,我们如何才能使其他图像视图从一个位置移动到另一个位置呢?不会放置用于多视图移动的代码。帮帮忙..朋友

Jitender开发

我很久以前就编写了这段代码,看看它是否对您有用

import java.util.ArrayList;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.FrameLayout;
import android.widget.FrameLayout.LayoutParams;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.widget.TextView;

public class DragAndDropActivity extends Activity {
    public FrameLayout board;

    int dropZone1_X, dropZone2_X, dropZone3_X, dropZone1_Y, dropZone2_Y,
            dropZone3_Y, movingCoordinateLeft = 0, movingCoordinateTop = 0;

    int windowHeight, windowWidth, defaultMargin = 150;
    ImageView answerOption1, answerOption2, answerOption3, dropZone1,
            dropZone2, dropZone3;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        board = new FrameLayout(this);
        setContentView(R.layout.layout);

        /*
         * set id's of view objects
         */
        setIds();

        /*
         * set on touch listener
         */
        setOnTouchListener();
        /*
         * get window dimensions
         */
        getWindowDimensions();

    }

    private void setOnTouchListener() {
        // TODO Auto-generated method stub
        answerOption1.setOnTouchListener(dragt);
        answerOption2.setOnTouchListener(dragt);
        answerOption3.setOnTouchListener(dragt);

    }

    private void setIds() {
        // TODO Auto-generated method stub

        board = (FrameLayout) findViewById(R.id.Board);
        // ids for answer options
        answerOption1 = (ImageView) findViewById(R.id.answer_option_1);
        answerOption2 = (ImageView) findViewById(R.id.answer_option_2);
        answerOption3 = (ImageView) findViewById(R.id.answer_option_3);

        // ids for drop zones
        dropZone1 = (ImageView) findViewById(R.id.frame1);
        dropZone2 = (ImageView) findViewById(R.id.frame2);
        dropZone3 = (ImageView) findViewById(R.id.frame3);

    }

    /*
     * 
     * Get default view dimensions at run time
     */

    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
        if (hasFocus) {

            System.out.println("Method--onWindowFocusChanged");

            System.out.println("\n\nFirst drop zone dimensions");
            System.out.println("left margin-->" + dropZone1.getLeft());
            System.out.println("top margin-->" + dropZone1.getTop());

            System.out.println("\n\nSecond drop zone dimensions");
            System.out.println("left margin-->" + dropZone2.getLeft());
            System.out.println("top margin-->" + dropZone2.getTop());

            System.out.println("\n\nThird drop zone dimensions");
            System.out.println("left margin-->" + dropZone3.getLeft());
            System.out.println("top margin-->" + dropZone3.getTop());

        }
    }

    private void getWindowDimensions() {
        // TODO Auto-generated method stub
        DisplayMetrics metrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(metrics);
        windowHeight = metrics.heightPixels;
        System.out.println("window height" + windowHeight);
        windowWidth = metrics.widthPixels;
        System.out.println("window width" + windowWidth);

    }

    // onCreate
    OnTouchListener dragt = new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            FrameLayout.LayoutParams par = (LayoutParams) v.getLayoutParams();
            switch (v.getId()) {// What is being touched
            /***
             * 
             * Answer option 1
             * 
             * ***/
            case R.id.answer_option_1: {
                // Which action is being taken
                switch (event.getAction()) {
                case MotionEvent.ACTION_MOVE: {
                    par.topMargin = (int) event.getRawY()
                            - (v.getHeight() + 22);
                    par.leftMargin = (int) event.getRawX()
                            - (v.getWidth() / 2 + 150);

                    movingCoordinateLeft = (int) event.getRawX()
                            - (v.getWidth() / 2 + 0);
                    movingCoordinateTop = par.topMargin;

                    System.out.println("Answer 1 --- left"
                            + movingCoordinateLeft + "---top"
                            + movingCoordinateTop);

                    v.setLayoutParams(par);

                    break;
                }// inner case MOVE
                case MotionEvent.ACTION_UP: {
                    par.height = 40;
                    par.width = 40;
                    /*
                     * par.topMargin = (int) event.getRawY() - (v.getHeight() +
                     * 15); par.leftMargin = (int) event.getRawX() -
                     * (v.getWidth() / 2 + 90);
                     */

                    if (windowHeight < 460) {
                        par.topMargin = 109;
                        par.leftMargin = 0;
                        par.height = 22;
                        par.width = 105;

                    } else {
                        par.topMargin = defaultMargin;
                        par.leftMargin = 0;
                    }

                    // check if co-ordinates matched and drop answer in drop
                    // zone
                    if ((movingCoordinateLeft > 10 && movingCoordinateLeft < 80)
                            && (movingCoordinateTop > 10 && movingCoordinateTop < 100)) {

                        System.out.println("left " + movingCoordinateLeft
                                + "top  " + movingCoordinateTop);

                        dropZone1.setImageDrawable(getResources().getDrawable(
                                R.drawable.duck));
                        answerOption1.setVisibility(View.INVISIBLE);

                    }

                    v.setLayoutParams(par);
                    break;
                }// inner case UP
                case MotionEvent.ACTION_DOWN: {

                    System.out.println("left" + event.getRawX());
                    System.out.println("top" + event.getRawY());

                    if (windowHeight < 460) {

                        par.height = 40;
                        par.width = 40;

                    } else {
                        par.height = 40;
                        par.width = 40;
                    }

                    v.setLayoutParams(par);
                    break;
                }// inner case UP
                }// inner switch
                break;
            }// case pawn

            /***
             * 
             * Answer option 2
             * 
             * ***/

            case R.id.answer_option_2: {// Which action is being taken
                switch (event.getAction()) {
                case MotionEvent.ACTION_MOVE: {

                    par.topMargin = (int) event.getRawY()
                            - (v.getHeight() + 22);
                    par.leftMargin = (int) event.getRawX()
                            - (v.getWidth() / 2 + 150);

                    movingCoordinateLeft = (int) event.getRawX()
                            - (v.getWidth() / 2 + 0);
                    movingCoordinateTop = par.topMargin;

                    v.setLayoutParams(par);

                    break;
                }// inner case MOVE
                case MotionEvent.ACTION_UP: {
                    par.height = 40;
                    par.width = 40;
                    /*
                     * par.topMargin = (int) event.getRawY() - (v.getHeight() +
                     * 15); par.leftMargin = (int) event.getRawX() -
                     * (v.getWidth() / 2 + 90);
                     */

                    if (windowHeight < 460) {
                        par.topMargin = 150;
                        par.leftMargin = 0;
                        par.height = 40;
                        par.width = 40;

                    } else {
                        par.topMargin = 200;
                        par.leftMargin = 0;
                    }

                    // check if co-ordinates matched and drop answer in drop
                    // zone
                    if ((movingCoordinateLeft > 120 && movingCoordinateLeft < 200)
                            && (movingCoordinateTop > 10 && movingCoordinateTop < 100)) {

                        System.out.println("left " + movingCoordinateLeft
                                + "top  " + movingCoordinateTop);

                        dropZone2.setImageDrawable(getResources().getDrawable(
                                R.drawable.hen));
                        answerOption2.setVisibility(View.INVISIBLE);
                    }

                    v.setLayoutParams(par);

                    break;
                }// inner case UP
                case MotionEvent.ACTION_DOWN: {

                    if (windowHeight < 460) {

                        par.height = 40;
                        par.width = 40;

                    } else {
                        par.height = 40;
                        par.width = 40;
                    }

                    v.setLayoutParams(par);
                    break;
                }// inner case UP
                }// inner switch
                break;
            }// case pawn2

            /***
             * 
             * Answer option 3
             * 
             * ***/

            case R.id.answer_option_3: {// Which action is being taken
                switch (event.getAction()) {
                case MotionEvent.ACTION_MOVE: {

                    par.topMargin = (int) event.getRawY()
                            - (v.getHeight() + 22);
                    par.leftMargin = (int) event.getRawX()
                            - (v.getWidth() / 2 + 150);

                    movingCoordinateLeft = (int) event.getRawX()
                            - (v.getWidth() / 2 + 0);
                    movingCoordinateTop = par.topMargin;

                    v.setLayoutParams(par);

                    break;
                }// inner case MOVE
                case MotionEvent.ACTION_UP: {
                    par.height = 40;
                    par.width = 40;
                    /*
                     * par.topMargin = (int) event.getRawY() - (v.getHeight() +
                     * 15); par.leftMargin = (int) event.getRawX() -
                     * (v.getWidth() / 2 + 90);
                     */

                    if (windowHeight < 460) {
                        par.topMargin = 191;
                        par.leftMargin = 0;
                        par.height = 40;
                        par.width = 40;

                    } else {
                        par.topMargin = 250;
                        par.leftMargin = 0;
                    }

                    // check if co-ordinates matched and drop answer in drop
                    // zone
                    if ((movingCoordinateLeft > 220 && movingCoordinateLeft < 310)
                            && (movingCoordinateTop > 10 && movingCoordinateTop < 100)) {

                        System.out.println("left " + movingCoordinateLeft
                                + "top  " + movingCoordinateTop);

                        dropZone3.setImageDrawable(getResources().getDrawable(
                                R.drawable.queen));
                        answerOption3.setVisibility(View.INVISIBLE);
                    }
                    v.setLayoutParams(par);

                    break;
                }// inner case UP
                case MotionEvent.ACTION_DOWN: {
                    System.out.println("down");
                    if (windowHeight < 460) {

                        par.height = 40;
                        par.width = 40;

                    } else {
                        par.height = 40;
                        par.width = 40;
                    }
                    v.setLayoutParams(par);
                    break;
                }// inner case UP
                }// inner switch
                break;
            }// case pawn2

            }// switch
            return true;
        }// onTouch

    };// dragt

}

和layout.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/rl"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:gravity="center_horizontal" >

        <ImageView
            android:id="@+id/frame3"
            android:layout_width="100dp"
            android:layout_height="80dp"
            android:layout_alignParentRight="true"
            android:src="@drawable/drag_drop_button" />

        <ImageView
            android:id="@+id/frame2"
            android:layout_width="100dp"
            android:layout_height="80dp"
            android:layout_toLeftOf="@+id/frame3"
            android:src="@drawable/drag_drop_button" />

        <ImageView
            android:id="@+id/frame1"
            android:layout_width="100dp"
            android:layout_height="80dp"
            android:layout_toLeftOf="@+id/frame2"
            android:src="@drawable/drag_drop_button" />
    </RelativeLayout>

    <FrameLayout
        android:id="@+id/Board"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_gravity="center" >

        <ImageView
            android:id="@+id/answer_option_1"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_gravity="center_horizontal"
            android:layout_marginTop="150dp"
            android:background="@drawable/duck" >
        </ImageView>

        <ImageView
            android:id="@+id/answer_option_2"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_below="@+id/answer_option_1"
            android:layout_gravity="center_horizontal"
            android:layout_marginTop="200dp"
            android:background="@drawable/hen" >
        </ImageView>

        <ImageView
            android:id="@+id/answer_option_3"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_gravity="center_horizontal"
            android:layout_marginTop="250dp"
            android:background="@drawable/queen" >
        </ImageView>
    </FrameLayout>

</RelativeLayout>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在视图组(Android)中移动视图?

来自分类Dev

如何在单个画布Android中移动多个位图

来自分类Dev

如何在xml中移动图像视图

来自分类Dev

如何在Git中移动多个目录?

来自分类Dev

如何在Android IDE中移动文件

来自分类Dev

如何在libgdx / android中移动圈子?

来自分类Dev

如何在多个文本文件中移动行?

来自分类Dev

如何在一笔交易中移动多个 blob?

来自分类Dev

如何在Android中移动Mapsforge图层(标记)

来自分类Dev

如何在android studio中移动(上/下)代码行?

来自分类Dev

如何在Android中移动验证消息或密码

来自分类Dev

在android中移动和旋转视图

来自分类Dev

如何在pdf视图上移动/拖动多个视图?

来自分类Dev

如何在Pycharm项目视图中移动项目文件夹?

来自分类Dev

如何在Android中永久移动视图

来自分类Dev

如何使用视图分页器在android片段选项卡中移动下一页?

来自分类Dev

如何使用视图分页器在android片段选项卡中移动下一页?

来自分类常见问题

如何在Pygame中移动矩形

来自分类Dev

如何在MFC中移动窗口?

来自分类Dev

如何在Eigen中移动矩阵?

来自分类Dev

如何在QtDesigner中移动项目?

来自分类Dev

如何在类型列表中移动类型?

来自分类Dev

如何在输入字段中移动文本?

来自分类Dev

如何在多维数组中移动元素?

来自分类Dev

如何在Realm中移动对象

来自分类Dev

如何在flexbox中移动项目?

来自分类Dev

如何在pygame中移动时射击

来自分类Dev

如何在pywinauto中移动UIAWrapper窗口?

来自分类Dev

如何在QAbstractItemView中移动QWidget?