Custom Progress bar in android with Background - android

How i can make progress bar like this

Here i found my answer
Firstly you need add xml drawable resource with the name of progress_bar_background.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle"
>
<corners android:radius="18dp" />
<stroke android:color="#color/transparent" android:width="6dp" />
</shape>
Now make an other xml resource file with the name of curved_progress_bar.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="#android:id/background">
<shape>
<corners android:radius="18dp" />
<solid android:color="#color/transparent" />
<!-- <stroke android:color="#color/transparent" android:width="6dp" />-->
</shape>
</item>
<item android:id="#android:id/progress">
<clip>
<shape>
<corners android:radius="18dp" />
<solid android:color="#FFFFFF" />
</shape>
</clip>
</item>
</layer-list>
and Finally in Splash activity xml file paste this code for Progress bar
<TextView
android:id="#+id/textView"
android:layout_centerInParent="true"
android:layout_centerHorizontal="true"
android:layout_width="wrap_content"
android:textColor="#color/white"
android:textSize="22dp"
android:textStyle="bold"
android:fontFamily="#font/symbioarltmedium"
android:layout_height="wrap_content"
android:text="80%"/>
<ProgressBar
android:layout_marginTop="10dp"
android:layout_centerHorizontal="true"
android:layout_below="#+id/textView"
android:id="#+id/progressBar"
style="#style/Widget.AppCompat.ProgressBar.Horizontal"
android:layout_width="300dp"
android:layout_height="50dp"
android:indeterminate="false"
android:max="100"
android:padding="5dp"
android:progress="1"
android:background="#drawable/progress_bar_background"
android:progressDrawable="#drawable/curved_progress_bar"
/>
and here in Java
private ProgressBar progressBar;
TextView textView;
private int progressStatus = 0;
private Handler handler = new Handler();
progressBar = (ProgressBar) findViewById(R.id.progressBar);
textView = (TextView) findViewById(R.id.textView);
// Start long running operation in a background thread
new Thread(new Runnable() {
public void run() {
while (progressStatus < 100) {
progressStatus += 1;
// Update the progress bar and display the
//current value in the text view
handler.post(new Runnable() {
public void run() {
progressBar.setProgress(progressStatus);
textView.setText(progressStatus+"%");
}
});
try {
// Sleep for 200 milliseconds.
Thread.sleep(25);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Intent intent = new Intent(SplashActivity.this, HomeActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
finish();
}
}).start();
and use this color
<color name="transparent">#27EEECEC</color>

it is compoundView (TextView + CustomProgressBar)

Related

Android : I want to create loader with flight image

I want to create loader in android as same as attached gif
Thanks in advance
Without Plane in your Image I prefer to use ProgressBar
but I will Be More Easy to user SeekBar As Progress Bar
so let`s make it in Simplest way
in Layout XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:hardwareAccelerated="false"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<SeekBar
android:paddingTop="10dp"
android:paddingBottom="10dp"
android:background="#32aaef"
android:id="#+id/sbHeight"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:max="100"
android:progress="0"
android:progressDrawable="#drawable/seekbar_as_progress"
android:thumb="#drawable/plane"
/>
</LinearLayout>
And where seekbar_as_progress is
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Define the background properties like color etc -->
<item android:id="#android:id/background">
<shape
android:shape="line"
android:useLevel="true">
<stroke
android:width="3dp"
android:color="#c9c9c9"
android:dashGap="20dp"
android:dashWidth="3dp" />
</shape>
</item>
<!-- Define the progress properties like start color, end color etc -->
<item android:id="#android:id/progress">
<clip>
<shape
android:shape="line"
android:useLevel="true">
<stroke
android:width="6dp"
android:color="#ffffff"
android:dashGap="20dp"
android:dashWidth="4dp" />
</shape>
</clip>
</item>
</layer-list>
and #drawable/plane is plane Icon
And In Your Activity
#Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// DountChart view = new DountChart(this);
setContentView(R.layout.empty);
final SeekBar sbHeight = findViewById(R.id.sbHeight);
sbHeight.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
sbHeight.setOnTouchListener(new View.OnTouchListener(){
#Override
public boolean onTouch(View v, MotionEvent event) {
return true;
}
});
final int[] progress = {0};
final Handler ha=new Handler();
ha.postDelayed(new Runnable() {
#Override
public void run() {
//call function
if (progress[0] != 100){
AppLogger.log("Prog",progress[0]+"");
progress[0]= progress[0]+1;
sbHeight.setProgress(progress[0]);
ha.postDelayed(this, 100);
}
}
}, 100);
}
and that`s All

SeekBar secondaryProgress not showing

I have a question, I have a seek bar and I want to show the buffer progress of an ExoPlayer media file using the secondary progress bar of the seekBar, the problem is that it´s not showing. Im running on API 21
Here´s the xml code:
<SeekBar
android:id="#+id/seekBarAudioA"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:maxHeight="3dip"
android:minHeight="3dip"
android:progressDrawable="#drawable/seek_bar_progress"
android:secondaryProgressTint="#android:color/holo_blue_dark"
android:thumbTint="#color/amber"
app:layout_constraintBottom_toBottomOf="#+id/play_pause"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintLeft_toRightOf="#+id/play_pause"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="#+id/play_pause" />
and here´s the java code:
SeekBar = new Thread(new Runnable() {
#Override
public void run() {
try {
while (currentlyPlaying && currentAudioHolder.getAdapterPosition() == audioPosition) {
int duration = (int) exoPlayer.getDuration();
currentAudioHolder.seekBarAudio.setMax(duration);
currentAudioHolder.seekBarAudio.setSecondaryProgress((int) exoPlayer.getBufferedPosition());
final int currPosition = (int) exoPlayer.getCurrentPosition();
Log.d("Buffer", "secondary progress bar position is: " + (int) exoPlayer.getBufferedPosition() + ", and the current position is: " + currPosition);
currentAudioHolder.seekBarAudio.setProgress(currPosition);
((ChatActivity) context).runOnUiThread(new Runnable() {
#Override
public void run() {
currentAudioHolder.audioLength.setText(convertTime(currPosition));
}
});
Thread.sleep(sleep);
}
} catch (InterruptedException i) {
currentlyPlaying = false;
}
}
});
SeekBar.start();
Please help :(
I might be late, but here is my answer: you should check your seek_bar_progress file, that you use for android:progressDrawable, and see if it looks like this:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="#android:id/background">
<shape android:shape="rectangle">
<corners android:radius="2dp"/>
<solid android:color="#color/myBgColor"/>
</shape>
</item>
<item android:id="#android:id/secondaryProgress">
<scale android:scaleWidth="100%">
<shape android:shape="rectangle">
<corners android:radius="2dp"/>
<solid android:color="#color/myColor"/>
</shape>
</scale>
</item> <item android:id="#android:id/progress">
<clip>
<shape android:shape="rectangle">
<corners android:radius="2dp"/>
<solid android:color="#color/myColor"/>
</shape>
</clip>
</item>
</layer-list>
I found out that the part with the #android:id/secondaryProgress id was missing in my drawable, and that was the reason why it was not working for me.
Hope it helps.

gradient in circular progress bar

i want to create a circular progressbar with inner glow, i cant seems to make it work with progress drawable with gradient start,center and end color.
This is what i want to create
This is what i could create
i will share my current approach.
background.xml
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="ring"
android:innerRadiusRatio="2.5"
android:thickness="10dp"
android:useLevel="false">
<gradient
android:startColor="#b6b6b6"
android:centerColor="#eeeeee"
android:endColor="#b6b6b6"
/>
</shape>
progress.xml
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="270"
android:toDegrees="270">
<shape
android:innerRadiusRatio="2.5"
android:shape="ring"
android:thickness="10dp"
android:useLevel="true"><!-- this line fixes the issue for lollipop api 21 -->
<gradient
android:angle="0"
android:startColor="#082a55"
android:centerColor="#0a3973"
android:endColor="#082a55"
android:useLevel="false" />
</shape>
</rotate>
mainactivity.xml
<ProgressBar
android:id="#+id/progressBar"
android:layout_width="200dp"
android:layout_height="200dp"
android:indeterminate="false"
android:layout_centerInParent="true"
android:progressDrawable="#drawable/circular_progress_bar"
android:background="#drawable/cicle_shape"
style="?android:attr/progressBarStyleHorizontal"
android:max="100"
android:progress="20" />
follow this steps
1. create progressbar.xml in drawblw folder
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="#android:id/background">
<shape
android:innerRadiusRatio="3"
android:shape="ring"
android:thicknessRatio="10.0"
android:useLevel="false">
<solid android:color="#color/colorWhite" />
<stroke android:color="#color/colorPrimary" />
</shape>
</item>
<item android:id="#android:id/progress">
<rotate
android:fromDegrees="270"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="270">
<shape
android:innerRadiusRatio="3"
android:shape="ring"
android:thicknessRatio="10.0"
android:useLevel="true">
<solid android:color="#color/colorAccent" />
</shape>
</rotate>
</item>
</layer-list>
2. add this in your layout file like this
<ProgressBar
android:id="#+id/circularProgressBar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="40dip"
android:layout_height="40dip"
android:layout_centerInParent="true"
android:layout_marginLeft="5dp"
android:layout_toRightOf="#+id/txt_continue"
android:indeterminate="false"
android:padding="2dp"
android:progressDrawable="#drawable/progressbar" />
<TextView
android:id="#+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="#id/circularProgressBar"
android:layout_alignLeft="#id/circularProgressBar"
android:layout_alignRight="#id/circularProgressBar"
android:layout_alignTop="#id/circularProgressBar"
android:gravity="center"
android:text="30"
android:textSize="16sp" />
2. now in your activity file
_progressBar = (ProgressBar) findViewById(R.id.circularProgressBar);
_progressBar.setProgress(0);
_progressBar.setMax(K);
txtTime = (TextView) findViewById(R.id.textView1);
final Calendar calendar = Calendar.getInstance();
long cur = calendar.getTimeInMillis();
long goal = (cur + (30 * 1000));
doSomethingRepeatedly(goal);
4. crate one method like this
private void doSomethingRepeatedly(final long goal) {
timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
try {
final Calendar calendar = Calendar.getInstance();
if (goal > calendar.getTimeInMillis()) {
Log.e("CHK", "CAlled");
runOnUiThread(new Runnable() {
#Override
public void run() {
Log.d("Time Plus", "Time Plus" + K--);
_progressBar.setProgress(K);
txtTime.setText(String.valueOf(K));
}
});
} else {
runOnUiThread(new Runnable() {
#Override
public void run() {
//Log.d("Time Plus", "Time Plus" + K--);
_progressBar.setProgress(K);
txtTime.setText(String.valueOf(K));
btnNotnow.setVisibility(View.VISIBLE);
txtContinue.setVisibility(View.GONE);
_progressBar.setVisibility(View.GONE);
txtTime.setVisibility(View.GONE);
}
});
Log.e("CHK", "Reached Limit");
cancel();
}
//Your code
} catch (Exception e) {
runOnUiThread(new Runnable() {
#Override
public void run() {
// Do some stuff
//ivGIF.setVisibility(View.INVISIBLE);
//Log.d("Time Plus", "Time Plus" + K++);
}
});
Log.e("CHK", "Exception");
// TODO: handle exception
}
}
}, 0, 1000);
}

Custom ProgressBar change Bitmap programmatically

I spent a lot of hours researching but with no hope. What i want to do is to change the bitmap drawable (android:id="progress) of progress_bar_clip.xml programmatically.
progress_bar_clip.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="#android:id/background">
<clip
android:clipOrientation="vertical"
android:drawable="#drawable/body_empty"
android:gravity="bottom" />
</item>
<item android:id="#android:id/progress">
<clip
android:clipOrientation="vertical"
android:gravity="bottom" >
<bitmap android:src="#drawable/body_empty"
android:id="#+id/to_be_changed" >
</bitmap>
</clip>
</item>
</layer-list>
<ProgressBar
android:id="#+id/progressbar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="180dp"
android:layout_height="240dp"
android:layout_marginTop="80dp"
android:indeterminateOnly="false"
android:max="100"
android:progress="-500"
android:progressDrawable="#drawable/progress_bar_clip"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
>
</ProgressBar>
code
Resources res = getResources();
LayerDrawable layerDrawable = (LayerDrawable)res.getDrawable(R.drawable.progress_bar_clip);
Drawable newDrawable = res.getDrawable(R.drawable.i_want_to_set_this);
layerDrawable.setDrawableByLayerId(R.id.to_be_changed, newDrawable);
Animation
private void wireResultAnimation(View view) {
final ProgressBar bar = (ProgressBar) view.findViewById(R.id.progressbar);
final Handler handler = new Handler();
runnable = new Runnable() {
#Override
public void run() {
if (bar.getProgress() != 100) {
bar.incrementProgressBy(1);
handler.postDelayed(runnable, 20);
}
}
};
handler.post(runnable);
}
The animation works fine however, the drawable is not changing.

How to make seekbar like this

I want to apply effect to seekbar as shown below:
Download it...
What I have tried is as below.The complete code is below just try and let me know if you will get the effect like below.
MainActivity.java
public class MainActivity extends Activity
{
private static int myProgress=0;
private SeekBar seekBar;
private int progressStatus=0;
private Handler myHandler=new Handler();
#Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.h_processbar);
}
public void beginYourTask(View view)
{
myProgress=0;
seekBar= (SeekBar)findViewById(R.id.seekBar);
seekBar.setMax(100);
new Thread(new Runnable() {
#Override
public void run() {
// TODO Auto-generated method stub
while(progressStatus<100)
{
progressStatus=performTask();
myHandler.post(new Runnable()
{
public void run() {
seekBar.setProgress(progressStatus);
}
});
}
myHandler.post(new Runnable() {
#Override
public void run() {
// TODO Auto-generated method stub
Toast.makeText(getBaseContext(),"Task Completed",Toast.LENGTH_LONG).show();
progressStatus=0;
myProgress=0;
}
});
}
private int performTask()
{
try {
//---Do some task---
Thread.sleep(100);
} catch (InterruptedException e)
{
e.printStackTrace();
}
return ++myProgress;
}
}).start();
}
}
progress_horizontal_green.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="#android:id/background">
<shape>
<corners android:radius="5dip" />
<gradient
android:startColor="#ff9d9e9d"
android:centerColor="#ff5a5d5a"
android:centerY="0.75"
android:endColor="#ff747674"
android:angle="270"
/>
</shape>
</item>
<item android:id="#android:id/secondaryProgress">
<clip>
<shape>
<corners android:radius="5dip" />
<gradient
android:startColor="#80ffd300"
android:centerColor="#80ffb600"
android:centerY="0.75"
android:endColor="#a0ffcb00"
android:angle="270"
/>
</shape>
</clip>
</item>
<item android:id="#android:id/progress">
<clip>
<shape>
<corners android:radius="5dip" />
<gradient
android:startColor="#ff54e854"
android:centerColor="#ff004900"
android:endColor="#ff54e854"
android:angle="90"
/>
</shape>
</clip>
</item>
</layer-list>
h_processbar.xml
<Button
android:id="#+id/button1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="beginYourTask"
android:text="Start Task"
android:textColor="#ffffff"
android:layout_margin="10dp"/>
<LinearLayout
android:layout_width="290dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="30dp"
>
<SeekBar
android:id="#+id/seekBar"
android:max="100"
android:progress="60"
android:layout_width="260dp"
android:layout_height="wrap_content"
android:thumb="#drawable/down_arrow_new"
android:progressDrawable="#drawable/progress_horizontal_green"
android:layout_margin="20dp"
/>
</LinearLayout>
down_arrow_new.png is here Download it...
As shown in figure LHS(left hand side) it starts from dark green color and as progress goes forward it looks like the combination of light green shades with blur effect.
and blur effect makes this awesome.
How can i achieve this?Any idea?
Any help will be appreciated.
Thank you.

Categories

Resources