Sólo el subproceso original que creó una jerarquía de vistas puede tocar sus vistas
Estoy tratando de obtener un ImageView para animar entre 2 imágenes en mi carpeta dibujable.
Pensé que todo funcionaría bien, pero el registro muestra un error: Only the original thread that created a view hierarchy can touch its views.
- Cómo crear una imagen giratoria controlada por gestos para una interfaz de usuario
- ¿Cómo se estableceLayoutParams () para un ImageView?
- Cómo centrar un Imageview en la pantalla con un FrameLayout? (Con código java)
- Android imageview obtener el color de píxel de la imagen escalada
- Cómo cargar el búfer RGB565 en ImageView
Heres mi código:
public class ExerciseActivity extends Activity { private ExercisesDataSource datasource; private Cursor cursor; private ImageView image_1_view; private Timer _timer; private int _index; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_exercise); datasource = new ExercisesDataSource(this); datasource.open(); cursor = datasource.fetchExercise(exerciseDataID); image_1_view = (ImageView) findViewById(R.id.exercise_image); _index = 1; _timer = new Timer(); _timer.schedule(new TickClass(), 1000); } public class TickClass extends TimerTask { private int columnIndex; @Override public void run() { if (_index == 1) { columnIndex = cursor.getColumnIndex(MySQLiteHelper.COLUMN_IMAGE_1); _index = 2; } else { columnIndex = cursor.getColumnIndex(MySQLiteHelper.COLUMN_IMAGE_2); _index = 1; } String image_1 = cursor.getString(columnIndex); image_1 = image_1.replace(".png", ""); int resourceId = getResources().getIdentifier(getPackageName() + ":drawable/" + image_1, null, null); image_1_view.setImageDrawable(getResources().getDrawable(resourceId)); } } }
Fui adelante y fijé las clases y las funciones al público pero eso no lo arregló.
Todos los recursos y todo está bien, ¿cómo puedo solucionar este error?
- Android.view.InflateException: al escribir una imagen personalizada
- Android - Dos imágenes vistas lado a lado
- No se muestra el problema de arrastrar y soltar de Android
- ¿Por qué el ImageView no está en pantalla completa?
- Ampliación de ImageView TOP_CROP
- Gire la vista de imagen alrededor de su centro sin cortar sus bordes
- Cómo obtener las dimensiones de un Drawable en un ImageView?
- Imagen de Android que fija el tamaño de la imagen
Su código en TickClass
ejecuta en otro subproceso. Para hacer trabajo de IU desde aquí, utilice runOnUiThread
. Vea el documento para más detalles.
runOnUiThread(new Runnable() { public void run() { image_1_view.setImageDrawable(getResources().getDrawable(resourceId)); } });
Debe utilizar un controlador. http://developer.android.com/reference/android/os/Handler.html
Cree el controlador en el onCreate. A continuación, utilice el controlador con el otro hilo. Envuelva el código dentro de la publicación y este código se ejecutará en el subproceso de interfaz de usuario que puede cambiar los componentes de interfaz de usuario.
"Public final boolean post (Runnable r) Añadido en API nivel 1
Hace que Runnable r se agregue a la cola de mensajes. El runnable se ejecutará en el subproceso al que está conectado este controlador. "
handler.post( new Runnable() { @Override public void run() { image_1_view.setImageDrawable(getResources().getDrawable(resourceId)); } });
- Android: Formato de cadena con doble valor
- Problemas de implementación de pestañas en ActionBarSherlock 4