How to make animated background for button in Android Studio
Hello guys, I am an java android application developer. In my project, I want to use a button with an animated background. What does it mean? The button class has a method .setBackgroundResource(int res_id), where do we pass R.drawable.some_res. I have video(R.raw.some_video). Can I use this video as a background for a button, and so that when it ends, it starts playing again. And another question is whether this background will consume a lot of phone resources.
To create an animated background for a button in Android Studio, you can use an animation drawable.
Create a new XML file in the res/drawable folder and give it a descriptive name, such as "button_background.xml".
In the XML file, add the following code:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<item android:drawable="#drawable/frame_1" android:duration="50"/>
<item android:drawable="#drawable/frame_2" android:duration="50"/>
<!-- Add additional frames as needed -->
</animation-list>
Replace "frame_1" and "frame_2" with the names of the drawables you want to use for each frame of the animation.
In your button's Java code, set the background of the button using the following code:
button.setBackgroundResource(R.drawable.button_background);
Note that the "android:oneshot" attribute is set to "false", which means that the animation will repeat indefinitely. If you want the animation to play only once, set this attribute to "true".
Keep in mind that using animations as background resources can consume more system resources than using static images, so be mindful of the size and length of the animation.
Related
I am currently trying to create a settings menu for my app, where different theme colors (also gradients) can be chosen. When a color gets selected I want all parent layout backgrounds of activities and fragments to have this color. I thought about creating different styles in my theme.xml and based on the chosen color I apply that theme by using setTheme(...). But when I create a style in my theme.xml file by using <item name="android:background">#drawable/gradient</item> all backgrounds of the UI elements also have that background. Can someone tell me how I can create styles that only affect the parent layout background or suggest any other solution?
I am trying to replicate the picture above for my app, but I am very confused and don't know how to proceed.(I'm new to android studio :/) I am trying to figure out how to know which color the user selects
So far, I have all the custom color drawable circles on my xml file but how do I know which color the user selected?(adding the check symbol) I'm thinking of putting a hidden check mark on each circle in my xml file, but only let it appear when clicked...but what would happen if the user clicked multiple colors?? I feel like there is a simpler way to approach this
I would really appreciate if someone could put me in the right direction for thinking about this, or if you could provide links that would help me learn how to do this.
First thing first, you would need to use RadioButton for this use case. Since the Radio buttons have inbuild mechanism of selecting only one element at a time. You can read more about RadioButtons at https://developer.android.com/guide/topics/ui/controls/radiobutton .
In case you need select mutiple colors at a time, then use Checkbox. (Read more about checkbox at https://developer.android.com/guide/topics/ui/controls/checkbox)
Now, checkbox/radio buttons can take care of selection part, now we would need to make the UI updates based on whether the color is selected or not. For this use case, we can use StateDrawable, which can change it's UI based on the state (selected/unselected).
Following is an example of StateDrawable for checkbox/radio button:
File location: app/resources/drawables/color_picker_item.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="#drawable/check_mark_image" android:state_checked="true"/>
<item android:drawable="#drawable/transparent" />
</selector>
The above drawable will show check_mark_image for checked state and transparent for unchecked state.
You can create this type of state drawable file for each color (this will allow to render different color checkbox based on requirement/color).
Or you can set the colors (blue, red, etc.) as background color to your checkbox and create only one state drawable file and reuse it for all based on your requirements.
You can assign this drawable to your checkbox as follow:
<CheckBox
...
android:button="#drawable/color_picker_item"/>
This way you can build your color picker.
I'm using the windowTranslucentStatus in my app theme.
Now, also want to tint the status bar to match my ActionBar.
Currently I'm using the SystemBarTint library, which is mostly fine except of one problem:
When the application launches, the OS shows a themed mockup layout as a splash image during the actual inflation. At that stage, there is no status bar tinting yet.
It looks like that (Took me 5 times to capture this screenshot during app launch):
Only after the activity is fully loaded the tint is applied. This is a problem for me and I'm looking for a way to somehow show the full branding on the status bar during launch.
I have read This blog post Which explains how you can actually control what will be displayed during launch by specifying a windowBackground.
I set the windowBackground to my main color -> then the entire screen painted pink.
I set background property on my activity's root element to white, but then again during launch the screen is pink, and only after the activity is loaded the content's background clears to white. This OK but not ideal.
I know I can create a bitmap with a white background and a color where the status bar should be, but then it won't be theme-able, meaning I'll have to create a new bitmap if the main color changes.
So to sum it up my question is this: Do you know a way to set a tint color for the status bar (in KitKat) in XML?
Alternatively, is it possible to create an XML drawable that will contain a colored bar at the top with a fixed height?
Here it is:
The (almost) perfect answer
Good to know that someone else was struggling the exact same problem like me.
To make it simple I'll post here the XML drawable:
window_background.xml:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="#+id/status_bar_background"
android:drawable="#color/main_app_color"/>
<item android:id="#+id/content_window_background"
android:drawable="#color/white"
android:top="25dp"/>
</layer-list>
And now in my theme I assign this drawable as the windowBackground:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="AppTheme" parent="BaseAppTheme">
<!-- Customize your theme here. -->
<item name="android:windowTranslucentNavigation">#bool/translucent_nav_bar</item>
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowBackground">#drawable/window_background</item>
</style>
</resources>
As I have replied here, you can see a full working example I created here (unfortunately too long to copy, but rest assured that repo is going nowhere!).
Oh and from Lollipop onwards there won't be any need for tricks ;)
So, I have a holo light theme, I am developing for android 3.0 and in my main.xml graphical layout shows a black screen which is what i want, but when I run the app on my android emulator version 3.0, it has a white background.
I want to have a black background, but main.xml layout shows me black background only the emulator shows different, why ????
Thanks, I have been developing for a week, but it's quite annoying. Thanks !!
The key is to customize Android Graphical XML Editor(Lets call it AGXE) properly to match the exact outcome of your program. For this purpose there are several ways of customizations are available.
In your case you are using Holo.Light the for your application, in your AGXE theme customization(in the light blue highlight) might be Holo/Theme.Holo (or something else) which has a black appearance for blank space.
If you want to know how your app layout will look in Holo.Light theme you have to manually set your theme to Holo.Light/Theme.Holo.Light
There are other controls in the AGXE, which can be used to get the most accurate representation of your layout in real life/emulator you specified (highlighted)(If you want explanations for each ask in comments below).
If you want to set a black background as Theme.Holo, you just have to put a single line code in all your layout android:background="#000000" which will set your entire background as black instead of white (even in Theme.Holo.Light), or you can specify your theme as Theme.Holo.
Read more here
I am building a custom ProgressDialog and would like for the background Activity to fade faster and darker than default. The only problem is I do not know where to look for the animation that handles the fading for a ProgressDialog. I have worked my way upstream from ProgressDialog -> AlertDialog -> Dialog but dont see anything in the java that looks useful. I am assuming there is an animation .xml file that controls it, so I am looking for that file, and how the calling program makes use of it.
Just to be a little more clear, the animation I am refering to is when a ProgressDialog pops up, the previously active activity fades to dark. I want to gain control of that animation.
The only ways I know of to alter the background dimming are via the android:backgroundDimEnabled and android:backgroundDimAmount settings (to completely turn on/off the background dimming and to control the amount of background dimming, respectively)
To alter these values, create (or edit) your res/values/styles.xml file with the following
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.ControlledDim" parent="android:Theme">
<item name="android:backgroundDimAmount">0.2</item>
</style>
</resources>
And apply that theme in the activity's manifest by setting the theme to
#style/Theme.ControlledDim
This may not offer as much control as you'd like but is hopefully a step in the right direction
(The default setting for android:backgroundDimAmount is 0.6)