将一个按钮拖到其他按钮位置

时间:2013-09-22 22:19:32

标签: android button onclicklistener

我想触摸按钮并拖动到其他按钮位置,您可以通过此图像获得清晰的想法。 Guiding Image

请帮帮我

我也发现这非常有帮助。 Touch and drag image in android 但我想拖到其他按钮位置,而不是屏幕上的其他一些按钮。我不知道我将如何检测按钮是否在其他按钮尺寸中输入。

到目前为止,我所做的只是动画,但我不想通过点击直接移动按钮。 我希望用户自己按钮移动到其他按钮位置。

代码

public class AnimationActivity extends Activity implements OnClickListener {

public Button btn_a1, btn_a2;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.mainsec);
    btn_a1 = (Button) findViewById(R.id.btn_a1);
    btn_a2 = (Button) findViewById(R.id.btn_a2);

    btn_a1.setOnClickListener(this);
    btn_a2.setOnClickListener(this);

}

@Override
public void onClick(final View v) {
    // TODO Auto-generated method stub
    switch (v.getId()) {
    case R.id.btn_a1: {
        int direction = -1;
        DisplayMetrics displaymetrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
        RelativeLayout.LayoutParams absParams = (RelativeLayout.LayoutParams) btn_a1
                .getLayoutParams();

        final float xDelta = (displaymetrics.widthPixels / 2)
                - absParams.leftMargin - (btn_a1.getWidth() / 2);

        final Animation animation = new TranslateAnimation(0, xDelta
                * direction, 0, 0);
        AnimationListener animationOutListener = new AnimationListener() {
            public void onAnimationEnd(Animation animation) {
                btn_a2.setBackgroundDrawable(R.id.blank);// Unselect
            }

            public void onAnimationRepeat(Animation animation) {
                // TODO Auto-generated method stub
            }

            public void onAnimationStart(Animation animation) {
                // TODO Auto-generated method stub
                btn_a2.setBackgroundDrawable(R.id.red);// Select
            }
        };
        animation.setAnimationListener(animationOutListener);
        animation.setDuration(1000);
        btn_a2.startAnimation(animation);

        break;
    }
    case R.id.btn_a2: {
        int direction = 1;
        DisplayMetrics displaymetrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
        RelativeLayout.LayoutParams absParams = (RelativeLayout.LayoutParams) btn_a1
                .getLayoutParams();

        final float xDelta = (displaymetrics.widthPixels / 2)
                - absParams.leftMargin - (btn_a1.getWidth() / 2);

        final Animation animation = new TranslateAnimation(0, xDelta
                * direction, 0, 0);
        AnimationListener animationOutListener = new AnimationListener() {
            public void onAnimationEnd(Animation animation) {
                btn_a1.setBackgroundDrawable(R.id.blank);// Unselect
            }

            public void onAnimationRepeat(Animation animation) {
                // TODO Auto-generated method stub
            }

            public void onAnimationStart(Animation animation) {
                // TODO Auto-generated method stub
                btn_a1.setBackgroundDrawable(R.id.red);// Select
            }
        };
        animation.setDuration(1000);
        btn_a1.startAnimation(animation);
        break;
    }
    }
}

1 个答案:

答案 0 :(得分:1)

这个怎么样:

您必须评估parentViews onTouchEvents按钮,如果点击它,您可以启动与该按钮关联的onClick方法,或者当您抬起手指时,可以选择适合您应用的方式。

但是当手指向下/移动时,您只需更改按钮坐标并在父视图上触发重绘。

您可能必须创建一个支持移动按钮的新视图。我不知道你是否可以在布局中做到这一点。