android 坐标布局变形,Android:scrollBy实现view随意移动并显示坐标

本文通过FrameLayout和LinearLayout来布局,并通过捕捉onTouchEvent事件来实现画面的随意移动,并同时显示移动后画面坐标。

控制view移动的函数主要是scrollTo和scrollBy,两者的差别如下:

scrollTo让我们的layout视图相对于屏幕的左上角进行偏移;

scrollBy是相当于我们当前的坐标进行偏移,我们上面

的例子如果改成scrollBy的话,这个TextView文字会不断地向右下角移动,多 次后我

们就不看不到这个TextView的内容了,因为它已经进行了非Layout视图区,而如果我们用scrollTo的话,不管点多少次按钮,它永 远就就

上面显示的那个位置。

这里我们用scrollBy更合理一些。

1、先上布局文件:main.xml<?xml version="1.0" encoding="utf-8"?>

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="horizontal">

android:layout_width="wrap_content"

android:layout_height="wrap_content"/>

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_gravity="bottom"

android:orientation="horizontal">

android:layout_height="wrap_content"

android:padding="5px"

android:text="当前坐标:"/>

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:padding="5px"

android:text="0,0"/>

2、Activity代码,MainActivity.java:package org.shuxiang.test;

import android.app.Activity;

import android.os.Bundle;

import android.view.MotionEvent;

import android.view.Window;

import android.widget.LinearLayout;

import android.widget.TextView;

public class MainActivity extends Activity

{

private LinearLayout container;

private int currentX;

private int currentY;

private TextView xyValue;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

requestWindowFeature(Window.FEATURE_NO_TITLE);

setContentView(R.layout.main);

container = (LinearLayout) findViewById(R.id.container);

xyValue = (TextView) findViewById(R.id.xyValue);

}

@Override

public boolean onTouchEvent(MotionEvent event)

{

switch (event.getAction())

{

case MotionEvent.ACTION_DOWN:

{

currentX = (int) event.getRawX();

currentY = (int) event.getRawY();

break;

}

case MotionEvent.ACTION_MOVE:

{

int x2 = (int) event.getRawX();

int y2 = (int) event.getRawY();

container.scrollBy(currentX - x2 , currentY - y2);

currentX = x2;

currentY = y2;

xyValue.setText(x2 + "," + y2);

break;

}

case MotionEvent.ACTION_UP:

{

break;

}

}

return true;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值