- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个简单的布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="animate"
android:text="animate" />
</LinearLayout>
在我的 Activity 中,我在更改按钮的 y
位置后打印 hit rect of button:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void animate(View view) {
printHitRect();
findViewById(R.id.button1).setY(50);
printHitRect();
}
private void printHitRect() {
Rect rect = new Rect();
findViewById(R.id.button1).getHitRect(rect);
Log.d(">>button1 hit rect", rect.flattenToString());
}
}
预期输出
button1 hit rect: 0 0 116 72
button1 hit rect: 0 50 116 122
实际输出
button1 hit rect: 0 0 116 72
button1 hit rect: -58 14 58 86
有人可以解释这个输出,我做错了什么还是一个错误?基本上,我在我的自定义 ViewGroup
中使用此 getHitRect()
来检测哪个 child 用户已触摸。有没有更好的方法让 child 在特定点,可能是像 getChildAt(x, y)
这样的函数?
我试过 setTranslateY()
,而不是 setY()
。我还使用了 NineOldAndroid 库以及内置的动画框架。如果我使用 findViewById(R.id.button1).animate().y(50)
而不是 setY()
,可以看到相同的行为。
更新:
我最终使用现在可用的 nineoldandroid 库编写了实用程序方法:
private static void getHitRect(View v, Rect rect) {
rect.left = (int) com.nineoldandroids.view.ViewHelper.getX(v);
rect.top = (int) com.nineoldandroids.view.ViewHelper.getY(v);
rect.right = rect.left + v.getWidth();
rect.bottom = rect.top + v.getHeight();
}
最佳答案
getHitRect()
有一个错误,无法正确应用转换。我们在内部修复了这个错误,并将在下一个 Android 公开版本中提供修复。
关于android - 奇怪的 View.getHitRect() 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17750116/
我不断得到 top, bottom, left, right = 0。我想我做错了,正确的方法是什么?时间差 在onCreate()中 ImageView trash = (ImageView
为了允许水平滚动,我重写了 onInterceptTouch(MotionEvent)。然而,我发现我无法检测到用户何时触摸了嵌入式 v。 View 上的 x、y 类似于 2000、2400,而 Mo
我有一个简单的布局: 在我的 Activity 中,我在更改按钮的 y 位置后打印 hit rect of button: public class MainActivity extends
“点击父坐标中的矩形”。但这意味着什么? 为了放大,我真正想知道的是短语“hit rectangle”的含义。它是做什么用的?框架如何处理它?在生命周期中什么时候返回值有意义?它与 getLeft()
我正在使用以下代码创建 View 的触摸委托(delegate)。问题是我想增加可点击区域的 View 位于非常狭窄的 LinearLayout 内部。所以下面的代码可以增加我的 View 的可点击区
我是一名优秀的程序员,十分优秀!