- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我遵循了 Gautier Haroun 回答的关于如何创建触摸屏并允许点击和显示坐标的线程。但我想通过分别除以 text view
宽度和高度来标准化坐标,以获得 0~1
之间的范围。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
final TextView textView = (TextView)findViewById(R.id.textView);
// this is the view on which you will listen for touch events
final View touchView = findViewById(R.id.touchView);
final float touchWidth = touchView.getWidth();
final float touchHeight = touchView.getHeight();
touchView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
textView.setText("Touch coordinates : " +
String.valueOf(event.getX()/touchWidth) + " x " + String.valueOf(event.getY()/touchHeight));
return true;
}
});
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
}
然后布局:
<TextView
android:id="@+id/textView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Hello World, TestActivity"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true" />
<TextView
android:id="@+id/touchView"
android:background="#f00"
android:layout_weight="1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:alpha="0.5" />
我尝试了 final float touchWidth = touchView.getWidth();
但结果是无限的,所以 touch Width 在我的例子中是 0 而不是 1500 左右。能告诉我如何获取View对象touchView的宽高吗?
谢谢
最佳答案
你可以使用这个:
touchView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
touchView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
else {
touchView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
final float touchWidth = touchView.getWidth();
final float touchHeight = touchView.getHeight();
...
}
});
您的代码将如下所示:
private float touchWidth;
private float touchHeight;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
final TextView textView = (TextView)findViewById(R.id.textView);
// this is the view on which you will listen for touch events
final View touchView = findViewById(R.id.touchView);
touchView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(touchWidth == 0 || touchHeight == 0)
return false;
textView.setText("Touch coordinates : " +
String.valueOf(event.getX()/touchWidth) + " x " + String.valueOf(event.getY()/touchHeight));
return true;
}
});
touchView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
touchView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
else {
touchView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
touchWidth = touchView.getWidth();
touchHeight = touchView.getHeight();
}
});
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
}
关于Android Studio,如何找到 View 的宽度和高度。 getWidth() 返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37248884/
我有下面的代码,它是在一个函数中定义的,该函数实际上设置父组件的宽度并进行布局...这个函数是从 4 个地方调用的,在一个地方有一个场景出现下面的错误,你可以看到我有检查了未定义,但它仍然在这个 IF
我正在处理 Java JFrame 对象,每当我调用 getWidth() 和 getHeight() 的值时,它都是总是返回超过我使用 setPreferredSize() 函数为面板设置的值。 有
我有一个图像displayStartText和originalStartText这样初始化: Image originalStartText = new ImageIcon(getClass().ge
为什么两个输出都打印84?第一个应显示为 84,第二个应显示为 220。如果我再次单击,则两个输出均显示为 220。 public void btnClick(View v) { System
我有一个算法,可以渲染具有宽度和高度的对象。但是当我使用 setWidth() 时,该对象实际上并没有获得该宽度,它以某种方式获得了我给它的宽度的 x2 之类的东西。检查下面的代码: var
我很难找到为什么这段代码返回空指针: import java.awt.Graphics2D; import java.awt.Rectangle; public class Move { priv
我想在加载后获取位图的宽度,我使用这段代码,其中 mybackground 是一个等于 R.drawable.background 的 int。 background=BitmapFactory.de
我希望通过使用 gamePanel 的 getWidth 方法来定位 Racket ,但它返回 0。它对于框架工作正常,对于面板也有效,但我决定重写大量代码并现在我无法让它工作。感谢帮助:) impo
我知道 Display 方法 getWidth() 自 API 13 以来已被弃用。我有以下代码行: Display display = ((WindowManager) getContext().g
我有一个像这样的 ImageView 我正在尝试通过使用获取在 imageview 中显示的图像的宽度 ImageView artCover = (ImageView)findViewById(R
我想让我的 ImageView 的大小是基于其宽度的矩形,这是通过覆盖 onGlobalLayout() 并放置 photo.getWidth() 完成的。但它只在竖屏下有效,在横屏下无效。 肖像效果
我正在 relativeLayout 中动态创建一些 ImageView,但我需要根据屏幕的高度和宽度改变大小。在我设置高度时,尚未创建 View 和布局,这意味着 getHeight() 和 get
这些方法在动态检索时返回正确的值,例如。在 onCreate() 中,但唯一的异常(exception)是当维度在 xml 布局文件中指定为 undefined 时,像 'wrap content'
我的 android 应用程序可绘制文件夹中有一个 jpg 图像,分辨率为 1000x600。我像这样将该图像加载到位图 Bitmap bitMap = BitmapFactory.decodeRe
本文整理了Java中android.graphics.YuvImage.getWidth()方法的一些代码示例,展示了YuvImage.getWidth()的具体用法。这些代码示例主要来源于Githu
本文整理了Java中am.widget.zxingscanview.ZxingScanView.getWidth()方法的一些代码示例,展示了ZxingScanView.getWidth()的具体用法
所以我想创建一个数轴类,我可以用它来显示沿单个轴的单个点,但我希望它能够响应当前所在容器的大小,并相对于该容器更改其大小。不幸的是,我无法正确使用 getWidth() 和 getHeight() 来
我正在重写 JPanel 的 paintComponent() 方法以在屏幕上绘制一些内容。 这就是它的样子: 我使用以下代码来设置剪切区域。这样边缘就可以弯曲。 RoundRectangle2D r
我需要调用getWidth()在我的 JPanel 对象“gameboard”上并将其存储在变量“width”中。这看起来很简单 int width = gameboard.getWidth(); 但
我通过扩展 LinearLayout 创建了一个自定义 View 。我可以在布局生命周期的哪个第一个点调用 subview 的 getWidth() 并获得正值? 最佳答案 如果在 onResume
我是一名优秀的程序员,十分优秀!