gpt4 book ai didi

java - 在 Android 中更改 ImageView 的位置时出现问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:49:17 25 4
gpt4 key购买 nike

我似乎无法在我的 android 应用程序中更改 ImageView 的位置。当我将我的代码放在特定方法中时会发生这种情况,如下所述。

我正在使用 IndoorAtlas我的android项目中的库。我下载了示例应用程序并让它在我的手机上运行。效果很好。

这个库有一个 onServiceUpdate 方法,用于处理位置更新。我的目标是在位置更新时移动 ImageView。很简单。

这是示例提供的原始方法(对我来说效果很好):

/* IndoorAtlasListener interface */

/**
* This is where you will handle location updates.
*/
public void onServiceUpdate(ServiceState state) {
mSharedBuilder.setLength(0);
mSharedBuilder.append("Location: ")
.append("\n\troundtrip : ").append(state.getRoundtrip()).append("ms")
.append("\n\tlat : ").append(state.getGeoPoint().getLatitude())
.append("\n\tlon : ").append(state.getGeoPoint().getLongitude())
.append("\n\tX [meter] : ").append(state.getMetricPoint().getX())
.append("\n\tY [meter] : ").append(state.getMetricPoint().getY())
.append("\n\tI [pixel] : ").append(state.getImagePoint().getI())
.append("\n\tJ [pixel] : ").append(state.getImagePoint().getJ())
.append("\n\theading : ").append(state.getHeadingDegrees())
.append("\n\tuncertainty: ").append(state.getUncertainty());
log(mSharedBuilder.toString());
}

下面是我用来更新 ImageView 位置的代码:

ImageView imgPoint = (ImageView) findViewById(R.id.imagePoint);
imgPoint.setX(250);
imgPoint.setY(200);

如果我将这些行添加到上面的 onServiceUpdate 方法中,该方法将不起作用。 onServiceUpdate 方法中没有任何内容运行。

但是,如果我将这 3 行放在 onCreate 或任何其他方法中,效果会很好。 ImageView 能够成功移动。

我还注意到,如果我在 onServiceUpdate 中添加一个 ToastAlert,同样的事情也会发生。 onServiceUpdate 方法根本不会触发。

Toast.makeText(getApplicationContext(), "Hello!",
Toast.LENGTH_LONG).show();

这是我的activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="300dp"
android:layout_weight="1">

<ImageView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/imageView"
android:layout_weight="1" />

<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1">

<ImageView
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_marginTop="1dp"
android:layout_marginLeft="1dp"
android:id="@+id/imagePoint"
android:layout_weight="1" />

</RelativeLayout>

</RelativeLayout>

<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"/>

</LinearLayout>

最佳答案

美味有道理。我下载了 SDK 并查看了示例应用程序。请注意您在代码 fragment 中引用的 log() 函数,其实现。在示例应用程序中是这样的:

    private void log(final String msg) {
Log.d(TAG, msg);
runOnUiThread(new Runnable() {
@Override
public void run() {
mLogAdapter.add(msg);
mLogAdapter.notifyDataSetChanged();
}
});
}

这意味着 onServiceUpdate 未在 UI 线程上运行,这意味着如果它崩溃,您可能无法获得任何日志或无法访问断点。

我的建议是将您的 3 行添加到日志方法中

        private void log(final String msg) {
Log.d(TAG, msg);
runOnUiThread(new Runnable() {
@Override
public void run() {
mLogAdapter.add(msg);
mLogAdapter.notifyDataSetChanged();
ImageView imgPoint = (ImageView)findViewById(R.id.imagePoint);
imgPoint.setX(250);
imgPoint.setY(200);
}
});
}

看看它是否运行,如果它只是使 ImageView 连同 X 和 Y 参数成为私有(private)成员;在 onServiceUpdate 上更新 X 和 Y,并在 UI 线程的日志中将它们的值设置为 ImageView。

(如果它明显有效,则必须在之后进行一些重构,但它会给你一个好的和快速的测试)。

关于java - 在 Android 中更改 ImageView 的位置时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29433468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com