android - 使进度条背景透明

标签 android android-progressbar

我正在使用this library当我通过网络服务进行后台工作时,用于进度指示器。我想在显示进度条时使背景透明。有没有办法以编程方式使窗口透明,就像进度对话框一样?

public class MainActivity extends AppCompatActivity{

    private EditText email, pass;
    private SessionManager session;
    private SQLiteHandler db;
    private AVLoadingIndicatorView pb;
    private static final String LOGIN = "http://ubooktoday.com/android/login";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        email = (EditText)findViewById(R.id.et1);
        pass = (EditText)findViewById(R.id.et2);

        session = new SessionManager(getApplicationContext());
        db = new SQLiteHandler(getApplicationContext());
        pb = new AVLoadingIndicatorView(this);

        if (session.isLoggedIn()) {
            startActivity(new Intent(MainActivity.this, ListVActivity.class));
            finish();
        }
    }
    
    public void login(View view){

        if (!email.getText().toString().equals("") && !pass.getText().toString().equals("")) {
            loginRequest();
        }else{
            Toast.makeText(getApplicationContext(), "Please enter the details", Toast.LENGTH_SHORT).show();
        }
        

    }

    private void loginRequest() {

        startAnim();

        StringRequest stringRequest = new StringRequest(Request.Method.POST, LOGIN,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {

                        stopAnim();

                        try {
                            JSONObject jObj = new JSONObject(response);

                            String status = jObj.getString("status");

                            // Now check status value
                            if (status.equals("0")) {

                                Toast.makeText(getApplicationContext(), jObj.getString("message"), Toast.LENGTH_LONG).show();
                            } else if (status.equals("1")) {

                                session.setLogin(true);
                                db.addUser(jObj.getString("spa_name"), jObj.getString("user_id"));

                                startActivity(new Intent(MainActivity.this, ListVActivity.class));
                                finish();



                            }
                        } catch (JSONException e) {
                            // JSON error
                            e.printStackTrace();
                            Toast.makeText(getApplicationContext(), "Json error: " + e.getMessage(), Toast.LENGTH_LONG).show();
                        }
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Toast.makeText(getApplicationContext(), "VolleyError" + error.toString(), Toast.LENGTH_LONG).show();
            }
        }) {
            @Override
            protected Map<String, String> getParams() {
                Map<String, String> params = new HashMap<String, String>();
                params.put("email", email.getText().toString());
                params.put("pass", pass.getText().toString());
                return params;
            }

        };

        RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());
        requestQueue.add(stringRequest);
    }

    public void startAnim(){
        findViewById(R.id.avloadingIndicatorView).setVisibility(View.VISIBLE);
        
    }

    public void stopAnim(){
        findViewById(R.id.avloadingIndicatorView).setVisibility(View.GONE);
       
    }
}

最佳答案

试试这个。制作自定义对话框类

public class CShowProgress {
public static CShowProgress mCShowProgress;
public Dialog mDialog;

public CShowProgress() {
}

public static CShowProgress getInstance() {
    if (mCShowProgress== null) {
        mCShowProgress= new CShowProgress();
    }
    return mCShowProgress;
}

public void showProgress(Context mContext) {
    mDialog= new Dialog(mContext);
    mDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    mDialog.setContentView(R.layout.custom_progress_layout);
    mDialog.findViewById(R.id.progress_bar).setVisibility(View.VISIBLE);
    mDialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
    mDialog.setCancelable(true);
    mDialog.setCanceledOnTouchOutside(true);
    mDialog.show();
}

public void hideProgress() {
    if (mDialog!= null) {
        mDialog.dismiss();
        mDialog= null;
    }
  }
}

对应的XMLcustom_progress_layout.xml

  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   xmlns:app="http://schemas.android.com/apk/res-auto"
   android:background="@android:color/transparent"
   android:orientation="vertical">

   <com.wang.avi.AVLoadingIndicatorView
     android:id="@+id/progress_bar"
     app:indicator="SemiCircleSpin"
     app:indicator_color="@android:color/black"
     android:layout_width="50dp"
     android:layout_height="50dp"
     android:visibility="visible" />
 </RelativeLayout>

和 Activity

  CShowProgress cShowProgress = CShowProgress.getInstance();
  cShowProgress.showProgress(Activity.this);

并通过调用隐藏

  cShowProgress.hideProgress();

希望这会有所帮助。

关于android - 使进度条背景透明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38009102/

相关文章:

java - 问 : Updating a ProgressBar with real results (includes code)

android - card.io Mono for Android (Xamarin Studio)

android - 定制媒体 Controller

java - EditText .setError() 未在重新创建时应用我的自定义错误图标

android - google+ 登录后推荐的身份验证方式是什么?

java - 无法将 TextView 放在 ProgressBar 上方

android - 以编程方式创建和显示 ProgressBar

安卓工作室 : "NullPointerException" when i load url into webview

android - ProgressBar 不工作 - Android

带有进度条和 GridView 的 Android 图像下载器(Android 运行时)