{"id":881,"date":"2011-05-14T12:17:07","date_gmt":"2011-05-14T10:17:07","guid":{"rendered":"http:\/\/192.168.1.2:8080\/?p=881"},"modified":"2011-05-14T12:17:07","modified_gmt":"2011-05-14T10:17:07","slug":"threads-y-animaciones-en-android","status":"publish","type":"post","link":"https:\/\/nauj27.com\/blog\/?p=881","title":{"rendered":"Threads y animaciones en Android"},"content":{"rendered":"<p>En <a title=\"Uso de gif animado en Android\" href=\"http:\/\/192.168.1.2:8080\/2011\/02\/08\/uso-de-gif-animado-en-android\/\">la entrada anterior<\/a> vimos c\u00f3mo convertir un gif animado en una animaci\u00f3n para Android. Lo siguiente que queremos hacer es usar esa animaci\u00f3n en una aplicaci\u00f3n.<\/p>\n<p><a title=\"Issue 1818 - AnimationDrawable.start()  doesn't work\" href=\"http:\/\/code.google.com\/p\/android\/issues\/detail?id=1818\">Es un problema conocido<\/a> que si se llama al m\u00e9todo <a href=\"http:\/\/developer.android.com\/reference\/android\/graphics\/drawable\/AnimationDrawable.html#start%28%29\"><em>AnimationDrawable.start()<\/em><\/a> desde m\u00e9todos del Activity como en <a href=\"http:\/\/developer.android.com\/reference\/android\/app\/Activity.html#onCreate%28android.os.Bundle%29\"><em>Activity.onCreate()<\/em><\/a>, la animaci\u00f3n no se mover\u00e1, y solo se ver\u00e1 la primera imagen de la misma. No habr\u00e1 ning\u00fan error, no habr\u00e1 ning\u00fan problema, y sin embargo la animaci\u00f3n no se mover\u00e1.<\/p>\n<p><a title=\"Soluci\u00f3n al problema\" href=\"http:\/\/code.google.com\/p\/android\/issues\/detail?id=1818#c5\">La soluci\u00f3n<\/a> la aporta un usuario en la misma <a title=\"Issue 1818\" href=\"http:\/\/code.google.com\/p\/android\/issues\/detail?id=1818\">hebra del problema<\/a>, y viene a decir que hay que crear una clase <em>Starter<\/em> que implemente la interfaz <a href=\"http:\/\/developer.android.com\/reference\/java\/lang\/Runnable.html\"><em>Runnable<\/em><\/a> y crear un objeto de este tipo dentro del m\u00e9todo <a title=\"En realidad el m\u00e9todo post() viene heredado de View\" href=\"http:\/\/developer.android.com\/reference\/android\/view\/View.html#post%28java.lang.Runnable%29\"><em>ImageView.post()<\/em><\/a>. De este modo el m\u00e9todo <a href=\"http:\/\/developer.android.com\/reference\/java\/lang\/Runnable.html#run%28%29\"><em>run()<\/em><\/a> de la clase Starter se ejecutar\u00e1 en la misma hebra que el m\u00e9todo del Activity (la hebra de interfaz del usuario &#8211; <a title=\"Solo se debe modificar la interfaz desde \u00e9sta hebra principal\" href=\"http:\/\/developer.android.com\/guide\/topics\/fundamentals\/processes-and-threads.html\">UI Thread<\/a>) y adem\u00e1s despu\u00e9s de que nuestro ImageView haya sido correctamente inicializado y mostrado en pantalla.<\/p>\n<p>Esta primera parte ir\u00eda en el m\u00e9todo del <em>Activity<\/em> donde queremos asignar e iniciar la animaci\u00f3n.<\/p>\n<pre lang=\"java\" line=\"1\">\/\/ --- %< ---\r\nimageView.setBackgroundResource(R.drawable.throbber);\r\nAnimationDrawable d = (AnimationDrawable)imageView.getBackground();\r\nimageView.post(new Starter(d));\r\n\/\/ --- %< ---<\/pre>\n<p>Y por otro lado tendr\u00edamos que crear una clase Starter() como la siguiente.<\/p>\n<pre lang=\"java\" line=\"1\">\/**\r\n* Starts the animation drawable passed to the constructor.\r\n*\/\r\nclass Starter implements Runnable {\r\n    private AnimationDrawable animationDrawable = null;\r\n\r\n    public Starter(AnimationDrawable animationDrawable) {\r\n        this.animationDrawable = animationDrawable;\r\n    }\r\n\r\n    public void run() {\r\n        this.animationDrawable.start();\r\n    }\r\n}<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>En la entrada anterior vimos c\u00f3mo convertir un gif animado en una animaci\u00f3n para Android. Lo siguiente que queremos hacer es usar esa animaci\u00f3n en una aplicaci\u00f3n. Es un problema conocido que si se llama al m\u00e9todo AnimationDrawable.start() desde m\u00e9todos del Activity como en Activity.onCreate(), la animaci\u00f3n no se mover\u00e1, y solo se ver\u00e1 la [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[151],"tags":[85,196,188],"_links":{"self":[{"href":"https:\/\/nauj27.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/881"}],"collection":[{"href":"https:\/\/nauj27.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nauj27.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nauj27.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/nauj27.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=881"}],"version-history":[{"count":9,"href":"https:\/\/nauj27.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/881\/revisions"}],"predecessor-version":[{"id":894,"href":"https:\/\/nauj27.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/881\/revisions\/894"}],"wp:attachment":[{"href":"https:\/\/nauj27.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=881"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nauj27.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=881"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nauj27.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=881"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}