我正在使用此代码在屏幕上移动按钮,但当我到达侧面时,它正在移出屏幕。
private float mPrezX, mPrevY;
private static final int MAX_CLICK_DURATION = 200;
private long startClickTime;
@Override
public boolean onTouch(View view, MotionEvent event) {
int action = event.getActionMasked();
Button gvup = (Button)findViewById(R.id.giveup);
gvup.setBackground(getResources().getDrawable(R.drawable.btn));
switch (action ) {
case MotionEvent.ACTION_DOWN: {
mPrevX = view.getX() - event.getRawX();
mPrevY = view.getY() - event.getRawY();
startClickTime = Calendar.getInstance().getTimeInMillis();//!!
gvup.setBackground(getResources().getDrawable(R.drawable.btn1));
break;
}
case MotionEvent.ACTION_MOVE:
{
view.animate()
.x(event.getRawX() + mPrevX)
.y(event.getRawY() + mPrevY)
.setDuration(0)
.start();
gvup.setBackground(getResources().getDrawable(R.drawable.btn1));
break;
}
case MotionEvent.ACTION_CANCEL:
gvup.setBackground(getResources().getDrawable(R.drawable.btn1));
break;
case MotionEvent.ACTION_UP:
long clickDuration = Calendar.getInstance().getTimeInMillis() - startClickTime;
if(clickDuration < MAX_CLICK_DURATION) {
//click event has occurred
gvup.setBackground(getResources().getDrawable(R.drawable.btn));
giveUp();
}
break;
}
return true;
}
如果按下它我也会改变它的背景颜色并且也可以点击它。
我需要在布局中保留该按钮。
我还尝试了this和this链接,但这两种方法都会在移到侧面时挤压按钮。
请帮忙。 提前谢谢。
答案 0 :(得分:0)
嗯,你需要获得它的X位置并将其宽度添加到它,以查看&#34;右边&#34; edge is并比较它是否大于或等于视口的宽度。我有一段时间没有写过JAVA,但这应该可以解决问题。
你在检查它的位置吗?
也许
int rightEdge = currentPos.X + itsWidth;
if(rightEdge >= screenWidth) // something here
也许在你的animate()方法中进行检查。我很难猜到这是怎么回事。什么是开火活动? event.getRawX()等于什么?这是屏幕上的触摸点吗?选中这个点后你会动画吗?或者你可以定义一个最小/最大x和最小/最大y,不要让你的圆圈过去。
view.animate()
if( .x(event.getRawX() + mPrevX) > screenWidth ){
.x(screenwidth - circleWidth)
} // do the same for the Y - must check the max and min for both Y and X
.x(event.getRawX() + mPrevX)
.y(event.getRawY() + mPrevY)
.setDuration(0)
.start();