Removing frame animation background in Android

How to remove frame animation background (or set transparency)?

When I set the background color in the xml layout file to be transparent, black appears when it starts.

When I setBackgroundColor (0); in java code , I get the following exception

java.lang.ClassCastException: android.graphics.drawable.ColorDrawable cannot be cast to android.graphics.drawable.AnimationDrawable

/res/layout/dialog_loading.xml

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="@drawable/background_black_semitransparent" > <!-- The background of this LinearLayout is so that there is a semi transparent black overlay over the application content while the loading animation plays --> <FrameLayout android:layout_width="@dimen/dialog_width" android:layout_height="wrap_content" android:layout_gravity="center" android:background="@android:color/transparent" > <ImageView android:id="@+id/iv_loading" android:layout_width="@dimen/dialog_width" android:layout_height="wrap_content" android:scaleType="fitCenter" android:adjustViewBounds="true" android:background="@android:color/transparent" /> </FrameLayout> </LinearLayout> 

/res/anim/frame_animation.xml

 <?xml version="1.0" encoding="utf-8"?> <!-- The animation is defined by the animation-list element. The oneshot attribute defines whether or not the animation loops. Each image is placed in a separate item elementwith the drawable attribute specifying the image file in /res/drawable/. The duration attribute specifies the time delay between images. --> <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false"> <item android:drawable="@drawable/loading_1_00000" android:duration="75" /> <item android:drawable="@drawable/loading_1_00002" android:duration="75" /> <item android:drawable="@drawable/loading_1_00004" android:duration="75" /> <item android:drawable="@drawable/loading_1_00006" android:duration="75" /> <item android:drawable="@drawable/loading_1_00008" android:duration="75" /> <item android:drawable="@drawable/loading_1_00010" android:duration="75" /> <item android:drawable="@drawable/loading_1_00012" android:duration="75" /> <item android:drawable="@drawable/loading_1_00014" android:duration="75" /> <item android:drawable="@drawable/loading_1_00016" android:duration="75" /> <item android:drawable="@drawable/loading_1_00018" android:duration="75" /> <item android:drawable="@drawable/loading_1_00020" android:duration="75" /> <item android:drawable="@drawable/loading_1_00022" android:duration="75" /> <item android:drawable="@drawable/loading_1_00024" android:duration="75" /> <item android:drawable="@drawable/loading_1_00026" android:duration="75" /> <item android:drawable="@drawable/loading_1_00028" android:duration="75" /> <item android:drawable="@drawable/loading_1_00030" android:duration="75" /> <item android:drawable="@drawable/loading_1_00032" android:duration="75" /> <item android:drawable="@drawable/loading_1_00034" android:duration="75" /> <item android:drawable="@drawable/loading_1_00036" android:duration="75" /> <item android:drawable="@drawable/loading_1_00038" android:duration="75" /> <item android:drawable="@drawable/loading_1_00040" android:duration="75" /> <item android:drawable="@drawable/loading_1_00042" android:duration="75" /> <item android:drawable="@drawable/loading_1_00044" android:duration="75" /> <item android:drawable="@drawable/loading_1_00046" android:duration="75" /> <item android:drawable="@drawable/loading_1_00048" android:duration="75" /> <item android:drawable="@drawable/loading_1_00050" android:duration="75" /> <item android:drawable="@drawable/loading_1_00052" android:duration="75" /> </animation-list> 

Java Code:

 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout to use as dialog or embedded fragment view = inflater.inflate(R.layout.dialog_loading, container, false); //Get the ImageView ImageView img1 = (ImageView) view.findViewById(R.id.iv_loading); //set the animation as the background of the ImageView //the animation is described in /res/anim/frame_animation.xml img1.setBackgroundResource(R.anim.frame_animation); img1.setBackgroundColor(0); // <---- get error here //create an instance of AnimationLoop AnimationLoop animLoop = new AnimationLoop(img1); //create a timer Timer t = new Timer(false); //schedule the animation loop t.schedule(animLoop, 100); return view; } //our animation handler class AnimationLoop extends TimerTask { ImageView img1; AnimationLoop(ImageView im) { img1 = im; } public void run() { // Get the background, which has been compiled to an AnimationDrawable object. AnimationDrawable frameAnimation1 = (AnimationDrawable) img1.getBackground(); // Start the animation (looped play back by default). frameAnimation1.start(); } } 

Error:

 06-07 12:04:39.450: E/AndroidRuntime(6581): FATAL EXCEPTION: Timer-1 06-07 12:04:39.450: E/AndroidRuntime(6581): java.lang.ClassCastException: android.graphics.drawable.ColorDrawable cannot be cast to android.graphics.drawable.AnimationDrawable 06-07 12:04:39.450: E/AndroidRuntime(6581): at za.co.domain.client.product.tools.ProgressDialogFragment$AnimationLoop.run(ProgressDialogFragment.java:79) 06-07 12:04:39.450: E/AndroidRuntime(6581): at java.util.Timer$TimerImpl.run(Timer.java:284) 

EDIT:

See screenshot enter image description here from the moment that android is offered: background = "# 0000":

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="#0000" > <FrameLayout android:layout_width="@dimen/dialog_width" android:layout_height="wrap_content" android:layout_gravity="center" android:background="#0000" > <ImageView android:id="@+id/iv_loading" android:layout_width="@dimen/dialog_width" android:layout_height="wrap_content" android:scaleType="fitCenter" android:adjustViewBounds="true" android:background="#0000" /> </FrameLayout> </LinearLayout> 
+4
source share
4 answers

ImageView has a setImageResource method that matches the image drawn in the foreground. You must set the background to transparent, as some have already indicated, and call

 img1.setImageResource(R.anim.frame_animation); 

on your ImageView.

Also, I personally will try to avoid loading 52 bitmaps into memory at the same time. animation-lists loads them all. This will probably only work on new phones depending on the size of the images.

Btw, everything works if your frames are on a transparent background. If this is not the case, and you need to either make them, or if this is not possible, you can implement a custom view that will draw raster images directly on the scale using the PorterDuff blend mode. See Paint and PorterDuffColorFilter Documentation

+1
source

Try to install

 android:background="@null" 

in FrameLayout , remove the line android:background="@android:color/transparent" from imageView .


UPDATE

You can also try adding this:

 AnimationDrawable drawable = (AnimationDrawable)res.getDrawable(RRanim.frame_animation); img1.setBackgroundDrawable(drawable); 
0
source

For a transparent background, use android:background="#0000" . #0000 stands for transparent background . Note that if you use this in FrameLayout , then you will have background_black_semitransparent as the background. If you want complete transparency, replace this with the above code.

0
source

Have you tried setting background transparency using R.id.color from #0000 or #00000000 before you execute setBackgroundResource ? In other words, switch around the two lines of code background settings.

0
source

Source: https://habr.com/ru/post/1484986/


All Articles