Here is my loading screen design code:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="50dp">
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:layout_marginBottom="8dp"
android:text="Loading..."
android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.517"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/progressBar"
app:layout_constraintVertical_bias="0.003" />
</androidx.constraintlayout.widget.ConstraintLayout>
java class:
package blood.hemoglobin.detection;
import android.app.Activity;
import android.app.AlertDialog;
import android.view.LayoutInflater;
class LoadingDialog {
private Activity activity;
private AlertDialog dialog;
LoadingDialog(Activity myActivity){
activity=myActivity;
}
void startLoadingDialog(){
AlertDialog.Builder builder=new AlertDialog.Builder(activity);
LayoutInflater inflater=activity.getLayoutInflater();
builder.setView(inflater.inflate(R.layout.custom_dialog,null));
builder.setCancelable(true);
dialog=builder.create();
dialog.show();
}
void dismissDialog(){
dialog.dismiss();
}
}
I have created an object in MainActivity class:
LoadingDialog loadingDialog;
inside onCreate method I initiated the object
loadingDialog=new LoadingDialog(MainActivity.this);
Now I have a method named start which will work on button click. On that button click my app will do some process on an image, during that time I want my app to show the loading screen. After my app finished the processing on the image it will show the processed image on ImageView as a result my loading screen will disappear. Here is my start method inside MainActivity Class:
public void start(View view){
textView.setText("loading");
loadingDialog.startLoadingDialog();
Log.i("checking","loading");
Bitmap b= BitmapFactory.decodeResource(getResources(), R.drawable.test);
b = b.copy( Bitmap.Config.ARGB_8888 , true);
Bitmap scaled = Bitmap.createScaledBitmap(b, 500, 800, true);
int w = b.getWidth();
int h = b.getHeight();
int colour;
int[][] red = new int[500][800];
int[][] green = new int[500][800];
int[][] blue=new int[500][800];
int[][] alpha=new int[500][800];
for(int i=0;i<500;i++)
for(int j=0;j<800;j++)
{
colour=scaled.getPixel(i,j);
red[i][j]=Color.red(colour);
green[i][j]=Color.green(colour);
blue[i][j]=Color.blue(colour);
alpha[i][j]= Color.alpha(colour);
}
int[][][] data = pyf.callAttr("test", red,green,blue).toJava(int[][][].class);
for(int x=0; x<500;x++) {
for(int y=0; y<800; y++) {
int color = Color.argb(255,data[0][y][x], data[1][y][x], data[2][y][x]);
scaled.setPixel(x, y, color);
}
}
int[] intArray = new int[]{ w,h };
Bitmap scaledup = Bitmap.createScaledBitmap(scaled, 625, 1000, true);
imageView.setImageBitmap(scaledup);
textView.setText(Arrays.toString(intArray));
loadingDialog.dismissDialog();
}
If I comment out this 2 line:
textView.setText(Arrays.toString(intArray));
loadingDialog.dismissDialog();
My loading screen appears after finishing the execution of the start function. But I want loading screen to appear when my start function is being executed and disappear when the execution of start function is finished, what am I doing wrong?