У меня есть проект, который добавляет точки к карте. Для карты мы используем GestureImageView, чтобы сделать ее прокручиваемой и для кнопок ImageButton.Фиксированное положение ImageButton на GestureImageView
Но происходит следующая проблема: всякий раз, когда мы перемещаем карту, мы должны убедиться, что точечные точки остаются в положении.
Проблема в том, что мы называем функцию трансляции ImageButton из другого потока внутри GestureImageView, и вам не разрешено вызывать это представление.
E/AndroidRuntime﹕ FATAL EXCEPTION: GestureImageViewAnimator
Process: nl.example.android, PID: 17024
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:6915)
at android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:1089)
at android.view.ViewGroup.invalidateChildFast(ViewGroup.java:4639)
at android.view.View.invalidateViewProperty(View.java:11748)
at android.view.View.setTranslationY(View.java:11102)
at nl.example.android.GestureImageView.setPosition(GestureImageView.java:455)
at nl.example.android.GestureImageViewTouchListener.handleDrag(GestureImageViewTouchListener.java:449)
at nl.example.android.GestureImageViewTouchListener$1.onMove(GestureImageViewTouchListener.java:122)
at nl.example.android.FlingAnimation.update(FlingAnimation.java:49)
at nl.example.android.Animator.run(Animator.java:45)
То, что я пытался в настоящее время: Класс для контекста деятельности
public class MyActivity extends Activity {
private static Activity activity;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
activity = this;
}
}
Код в GestureImageView:
final float transX = x;
MyActivity myActivity = new MyActivity();
myActivity.runOnUiThread(new Runnable() {
public void run() {
setTranslationY(transX);
}
});
Код в MainActivity:
MyActivity myActivity = new MyActivity();
Runnable runnable = new Runnable() {
@Override
public void run() {
pin1.setTranslationY(3);
synchronized(this){
this.notify();
}
}
};
synchronized(runnable) {
myActivity.runOnUiThread(runnable);
runnable.wait() ; // unlocks myRunable while waiting
}
Смотрите мой редактировать в настоящее время. – barwnikk