java - 如何提前获取我的 Button 的尺寸?

标签 java android

大家好,我基本上是在做一个钢琴应用程序。经过深思熟虑,我想我已经弄清楚了大多数钢琴应用程序是如何完成的,我被困在这里,这似乎对于获得所有其他功能(如幻灯片、多点触控、添加键等)非常重要。

是否可以在 Hand 之前知道我的可绘制按钮的尺寸? 假设我基本上有两个可绘制的键按钮,钢琴键 C 和 D:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal"
android:gravity="bottom" >

<Button
    android:id="@+id/ckey"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/keybutton" />

<Button
    android:id="@+id/dkey"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/keybutton" />

对于钢琴应用(白键),它们都使用相同的选择器:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item 
    android:drawable="@drawable/key"
    android:state_pressed="true"/>

<item 
    android:drawable="@drawable/key_pressed"/>
</selector>

但我想知道创建的按钮的尺寸或位置 BEFOREHAND 以便我可以在该按钮的顶部绘制一个区域并将该区域用于 onTouchListener。我需要那个区域以便我可以使用 onTouch。

@Override
public boolean onTouch(View v, MotionEvent event) {

int numberOfKeys = 2;
Region[] keyBoard = new Region[2]; //for 2 White Piano Keys
Integer pointerIndex = event.getActionIndex();
Float x = event.getX(pointerIndex);
Float y = event.getY(pointerIndex);

for(int j=0;j<1;j++){
    if(this.keyBoard[j].contains(x.intValue(),y.intValue())){
           //play corresponding sound

        }

所以知道我的图像尺寸:key.png 和 key_pressed.png 以及屏幕宽度和高度,也许还有其他我不知道的参数。是否可以在应用程序启动之前预先知道我的按钮的尺寸或坐标或位置?

不然怎么获取坐标呢? getTop() 和 getLeft() 似乎不是好的选择,因为它们返回 0,因为图像加载需要时间,因此代码无法检索它。

谢谢大家。顺便说一句,我是 super 菜鸟。如果我遗漏了什么,我深表歉意。

最佳答案

您可以在布局中设置按钮的宽度/高度 - 而不仅仅是使用 wrap_content

例如:android:layout_width="100dp"

**编辑:不要这样做,它已被弃用 ** 您也可以使用 AbsoluteLayout (而不是当前的 LinearLayout,如果您想准确设置事物的显示位置。

关于java - 如何提前获取我的 Button 的尺寸?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18344152/

相关文章:

Android - 在 vi​​ewpager 中的不同 fragment 之间导航时隐藏的 FAB

android - 如何处理XMPP XEP-0363 : HTTP File Upload feature at client side using SMACK library?

android - Android 中的布局响应问题

android - Cordova:在 Android App 中调用 loadUrl() 时如何设置 HTTP ACCEPT header ?

java - 使用主要 Activity 中的按钮更改第二个 Activity 中的颜色=崩溃

java - 写一个字母的n次方

java - Spring 事务不回滚

java - Google FooBar意外评估失败

java - 在 assertEquals() 中使用正则表达式不起作用

java - 使用 icu4j 格式化数字(拼写)