@Override
protected
void
onMeasure
(
int
widthMeasureSpec,
int
heightMeasureSpec) {
setMeasuredDimension(
100
,
100
);
float
downX, downY;
float
moveX, moveY;
@Override
public
boolean
onTouchEvent
(MotionEvent event) {
if
(event.getAction() == MotionEvent.ACTION_DOWN) {
downX = event.getRawX();
downY = event.getRawY();
if
(event.getAction() == MotionEvent.ACTION_MOVE) {
moveX = event.getRawX();
moveY = event.getRawY();
this
.setX(getX() + (moveX - downX));
this
.setY(getY() + (moveY - downY));
downX = moveX;
downY = moveY;
return
true
;
public class MainActivity extends Activity {
LinearLayout linear;
RelativeLayout relative;
FrameLayout frame;
AbsoluteLayout absolute;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
linear = (LinearLayout) findViewById(R.id.linear);
relative = (RelativeLayout) findViewById(R.id.relative);
frame = (FrameLayout) findViewById(R.id.frame);
absolute = (AbsoluteLayout) findViewById(R.id.absolute);
linear.addView(new TouchView(this));
relative.addView(new TouchView(this));
frame.addView(new TouchView(this));
absolute.addView(new TouchView(this));
源代码下载地址:http://download.csdn.net/detail/angcyo/8953263
至此: 文章就结束了,如有疑问: QQ群:274306954 欢迎您的加入.
ConstrainLayout是一款布局View,再Design库中,现已被大家广泛接受并使用。ConstrainLayout的布局采用的方式和其他都不同,他的对其方式是类似RelativeLayout,但是和RelativeLayout有明显的区别。
在布局渲染的时候,ConstrainLayout的子View是通过在一个容器中找到自己的位置,通过位置和对其方式来固定,所以在布局优化中,尝尝被提起到。
其中,`newX`和`newY`分别表示控件的新坐标。使用`setX()`和`setY()`方法可以改变控件的位置。需要注意的是,这些方法设置的是控件的左上角坐标,而不是中心点坐标。如果需要将控件移动到指定的中心点位置,可以通过以下代码实现:
// 获取控件
View view = findViewById(R.id.view);
// 获取控件宽度和高度
int width = view.getWidth();
int height = view.getHeight();
// 设置新的位置
int centerX = newX + width / 2;
int centerY = newY + height / 2;
view.setX(centerX);
view.setY(centerY);
其中,`width`和`height`分别表示控件的宽度和高度,`centerX`和`centerY`分别表示控件中心点的坐标。