问题描述
解决方案
你可以先记录原来的位置 再在Action_UP时 用动画移动到 原来的位置
解决方案二:
1.其实你需要改变控件的位置,
见demo
http://download.csdn.net/detail/q610098308/9511644
解决方案三:
public class MainActivity extends AppCompatActivity {
private TextView textView;
private int tvLeft, tvRight, tvTop, tvBottom;
private boolean first = true;
private int startX,startY;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.test);
textView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
startX = (int) event.getRawX();
startY = (int) event.getRawY();
break;
case MotionEvent.ACTION_MOVE:
textView.layout(
(int) (tvLeft + event.getRawX() - startX),
(int) (tvTop + event.getRawY() - startY),
(int) (tvRight + event.getRawX() - startX),
(int) (tvBottom + event.getRawY() - startY));
break;
case MotionEvent.ACTION_UP:
// TranslateAnimation translateAnimation = new TranslateAnimation(tvLeft, tvTop, tvRight, tvBottom);
// translateAnimation.setDuration(1000);
// textView.setAnimation(translateAnimation);
textView.layout(tvLeft, tvTop, tvRight, tvBottom);
break;
}
return true;
}
});
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus && first) {
tvLeft = textView.getLeft();
tvTop = textView.getTop();
tvRight = textView.getRight();
tvBottom = textView.getBottom();
first = false;
textView.setText(tvLeft + "," + tvTop + "," + tvRight + "," + tvBottom);
}
}
}
解决方案四:
public class MainActivity extends AppCompatActivity {
private TextView textView;
private int tvLeft, tvRight, tvTop, tvBottom;
private boolean first = true;
private int startX, startY;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.test);
textView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
startX = (int) event.getRawX();
startY = (int) event.getRawY();
break;
case MotionEvent.ACTION_MOVE:
textView.layout(
(int) (tvLeft + event.getRawX() - startX),
(int) (tvTop + event.getRawY() - startY),
(int) (tvRight + event.getRawX() - startX),
(int) (tvBottom + event.getRawY() - startY));
break;
case MotionEvent.ACTION_UP:
AnimatorSet set = new AnimatorSet();
set.playTogether(
ObjectAnimator.ofFloat(textView, "translationX", tvLeft - textView.getLeft()),
ObjectAnimator.ofFloat(textView, "translationY", tvTop - textView.getTop())
);
set.setDuration(2000).start();
break;
}
return true;
}
});
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus && first) {
tvLeft = textView.getLeft();
tvTop = textView.getTop();
tvRight = textView.getRight();
tvBottom = textView.getBottom();
first = false;
textView.setText(tvLeft + "," + tvTop + "," + tvRight + "," + tvBottom);
}
}
}
解决方案五:
加在 textView = (TextView) findViewById(R.id.test); 下面
if (first){
textView.post(new Runnable() {
@Override
public void run() {
tvLeft = textView.getLeft();
tvTop = textView.getTop();
tvRight = textView.getRight();
tvBottom = textView.getBottom();
first = false;
textView.setText(tvLeft + "," + tvTop + "," + tvRight + "," + tvBottom);
}
});
}
解决方案六:
这样基本实现了 你再优化下吧
public class MainActivity extends AppCompatActivity {
private TextView textView;
private int tvLeft, tvRight, tvTop, tvBottom;
private int Left, Right, Top, Bottom;
private boolean first = true;
private int startX, startY;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.test);
if (first){
textView.post(new Runnable() {
@Override
public void run() {
tvLeft = textView.getLeft();
tvTop = textView.getTop();
tvRight = textView.getRight();
tvBottom = textView.getBottom();
first = false;
textView.setText(tvLeft + "," + tvTop + "," + tvRight + "," + tvBottom);
}
});
}
textView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
startX = (int) event.getRawX();
startY = (int) event.getRawY();
Left = textView.getLeft();
Top = textView.getTop();
Right = textView.getRight();
Bottom = textView.getBottom();
break;
case MotionEvent.ACTION_MOVE:
textView.layout(
(int) (Left + event.getRawX() - startX),
(int) (Top + event.getRawY() - startY),
(int) (Right + event.getRawX() - startX),
(int) (Bottom + event.getRawY() - startY));
break;
case MotionEvent.ACTION_UP:
AnimatorSet set = new AnimatorSet();
set.playTogether(
ObjectAnimator.ofFloat(textView, "translationX", tvLeft - textView.getLeft()),
ObjectAnimator.ofFloat(textView, "translationY", tvTop - textView.getTop())
);
set.setDuration(2000).start();
textView.postDelayed(new Runnable() {
@Override
public void run() {
textView.layout(textView.getLeft(), textView.getTop(), textView.getRight(), textView.getBottom());
}
}, 2000);
break;
}
return true;
}
});
}
}
时间: 2024-09-17 04:28:13