我正在尝试制作一个简单的应用程序,以便更好地了解如何在Android上使用Touch事件.现在,我的Activity只是将ImageView移动到屏幕上触摸的坐标(MotionEvent的坐标).我可以设法通过应用一个简单的技巧将图像的新位置设置为由相对于图像位置(getX()
和getY()
)的触摸坐标组成的值来实现.在DX和DY变量是负责使触摸保持图像中恒存储此相对值.
现在我想在Activity中放置2个ImageViews,并且ImageViews只有两个固定点,一旦用户在另一个ImageView中心拖动一个ImageView,两个图像就会切换位置,但为了正确地做到这一点,我想获得真实的坐标图像中心.我评论了代码中使其正常工作以显示问题的部分.正如您在创建视图时在第一张图片中看到的那样(0, 0)
,无论图像坐标在何处(只要将初始位置定义为布局参数CENTER_IN_PARENT
),图像坐标就是简单的.
正如您在第二张图片中看到的那样,就我观察到的ImageView而言getX()
,getY()
当图像位于左上角时,就像图像的左上角位于DISPLAY的左上角一样返回坐标ACTIVITY WINDOW.
我想了解为什么会发生这种情况,如果有人知道如何实际获得ImageView的坐标,可以直接与MotionEvent的坐标进行比较.
图片:
我有一个应用程序只有使用不直接访问的服务,接收器和活动(没有启动器活动).
但是现在我必须添加一个用作启动器活动的活动但是只有当应用程序在BUILD期间设置了一些特定变量时,此启动器活动才必须存在.
所以基本上,当调用gradle构建时,我设置了一个变量HAS_LAUNCHER=1
,在我的build.gradle中,我有类似的东西:
defaultConfig {
...
def hasLauncher = System.getenv("HAS_LAUNCHER")
if (hasLauncher != null && hasLauncher == "1") {
// Something here to include the activity tag in the AndroidManifest.xml
}
}
Run Code Online (Sandbox Code Playgroud)
在我的AndroidManifest中,我必须<activity>
在if
条件成立时添加标记:
<activity
android:name=".LauncherActivity"
android:label="Launcher"
android:theme="@style/AppTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)