Как добавить прогресс в XWalkView

Я использую XWalkView для загрузки веб-страницы, например так:

<org.xwalk.core.XWalkView android:id="@+id/webview"
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >
</org.xwalk.core.XWalkView>

Деятельность

XWalkView mXWalkView = (XWalkView) findViewById(R.id.webview);
mXWalkView.load("http://xxxxxxxx", null);

подробнее о реализации XWalkView см. мой пост.

Но теперь, когда на странице слишком много контента, она будет вызывать 4~5 секунд до полной загрузки. Это приведет к пустой странице приложения. Я хочу добавить прогресс загрузки для XWalkView. Для XWalkView очень мало демо, я действительно не знал, с чего начать.

Любая помощь будет оценена. Thansk!

Отредактировано: после того, как я попробую в соответствии с ответом @Srihari, возникла еще одна утомленная проблема. Прогресс хорошо показывает, и когда он закончится на 100%, он исчезнет. Но он снова выпал со 100%, очень скоро после завершения загрузки страницы, и никогда не исчезал.

активность:

class ResourceClient extends XWalkResourceClient {
    public ResourceClient(XWalkView xwalkView) {
        super(xwalkView);
    }

    public void onLoadStarted(XWalkView view, String url) {
        mProgress = (ProgressBar) findViewById(R.id.progressBar);
        mProgress.setVisibility(View.VISIBLE);
        super.onLoadStarted(view, url);
        Log.d("INFO", "Load Started:" + url);
    }

    public void onLoadFinished(XWalkView view, String url) {
        super.onLoadFinished(view, url);
        Log.d("INFO", "Load Finished:" + url);
        bottomBar = (BottomBar) findViewById(R.id.bottomBar);
        mProgress = (ProgressBar) findViewById(R.id.progressBar);
        mProgress.setVisibility(View.GONE);
    }

    public void onProgressChanged(XWalkView view, int progressInPercent) {
        super.onProgressChanged(view, progressInPercent);
        Log.d("INFO", "Loading Progress:" + progressInPercent);
        mProgress = (ProgressBar) findViewById(R.id.progressBar);
        mProgress.setProgress(progressInPercent);
    }

XML

<ProgressBar
    android:id="@+id/progressBar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    style="@android:style/Widget.ProgressBar.Horizontal"
    android:layout_marginTop="50dp" />

4 ответа

Решение

Прежде чем я решу свою проблему, я иду, чтобы сделать умру в Мекке, я пытаюсь 2 дня, чтобы решить проблему после умры, я беру 2 минуты и решаю свою проблему, мой бог, помогите мне

Пожалуйста, не удаляйте этот разговор все, что мы имеем от Бога

Вам нужно молиться Богу, и вы получите все, что вы хотите

это моя основная деятельность

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.View;
import android.webkit.ValueCallback;
import android.widget.FrameLayout;
import android.widget.ProgressBar;

import org.xwalk.core.XWalkPreferences;
import org.xwalk.core.XWalkResourceClient;
import org.xwalk.core.XWalkUIClient;
import org.xwalk.core.XWalkView;

import static com.github.crazyorr.embeddedcrosswalk.R.string.url;
public class MainActivity extends AppCompatActivity {

    private XWalkView mXWalkView;
    private FrameLayout frameLayout;
    private SwipeRefreshLayout swipe;
    private ProgressBar progressBar;

    @SuppressLint("SetJavaScriptEnabled")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        frameLayout = (FrameLayout) findViewById(R.id.framelayout);
        progressBar = (ProgressBar) findViewById(R.id.ProgressBar);
        swipe= (SwipeRefreshLayout) findViewById(R.id.swipe);
        swipe.setColorSchemeResources(R.color.orange, R.color.green, R.color.blue, R.color.purple);
        swipe.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {

                @Override
                public void onRefresh() 
                {mXWalkView.reload(url);}
        });

            loadweb();
        }


      public void loadweb(){

        mXWalkView = (XWalkView) findViewById(R.id.webview);
        mXWalkView.setResourceClient(new ResourceClient(mXWalkView));
          mXWalkView.setUIClient(new XWalkUIClient(mXWalkView) {
              @Override
              public void onPageLoadStarted(XWalkView view, String url) {
                  frameLayout.setVisibility(View.VISIBLE);
                  progressBar.setVisibility(ProgressBar.VISIBLE);
              }

              @Override
              public void onPageLoadStopped(XWalkView view, String url, XWalkUIClient.LoadStatus status) {
                  progressBar.setVisibility(view.GONE);
                  swipe.setRefreshing(false);
              }
          });
        XWalkPreferences.setValue(XWalkPreferences.REMOTE_DEBUGGING, true);
        mXWalkView.getSettings().setJavaScriptEnabled(true);
        mXWalkView.loadUrl("https://www.google.com.sa");
      }


      class ResourceClient extends XWalkResourceClient {

        public ResourceClient(XWalkView xwalkView) {
            super(xwalkView);
        }

         public void onProgressChanged(XWalkView view, int progressInPercent){

             frameLayout.setVisibility(View.VISIBLE);
             progressBar.setProgress(progressInPercent);


             if (progressInPercent == 100){
                 frameLayout.setVisibility(View.GONE);
             }
             super.onProgressChanged(view, progressInPercent);



         }


      }





      @Override
      public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return super.onCreateOptionsMenu(menu);
      }

      @Override
      public void onBackPressed() {
        mXWalkView.evaluateJavascript("onBackPressed()", new ValueCallback<String>() {
            @Override
            public void onReceiveValue(final String value) {
                if (!Boolean.valueOf(value)) {
                    MainActivity.super.onBackPressed();
                }

            }
        });
      }
    }

я надеюсь, что это поможет вам

Показать индикатор выполнения на создании этого действия или фрагмента.

xWalkView.setResourceClient(new XWalkResourceClient(xWalkView){
    @Override
    public void onLoadFinished(XWalkView view, String url) {
        super.onLoadFinished(view, url);
        // Stop your progress bar here
    }
});

Надеюсь, что это может помочь вам..

Я исправил свою проблему, которая была в activity_main:

<org.xwalk.core.XWalkView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/webview"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <FrameLayout
            android:id="@+id/framelayout"
            android:layout_width="match_parent"
            android:layout_height="3dp"
            android:background="@android:color/transparent"
            android:visibility="visible"></FrameLayout>

        <ProgressBar
            android:id="@+id/ProgressBar"
            style="@android:style/Widget.DeviceDefault.Light.ProgressBar.Large"
            android:layout_width="match_parent"
            android:layout_height="4dp"
            android:layout_gravity="top"
            android:layout_marginTop="3dp"
            android:background="@android:color/transparent"
            android:progress="10"
            android:progressDrawable="@drawable/custom_progress" />
    </org.xwalk.core.XWalkView>

Я обнаружил, что усталость в моем вопросе вызвана динамическим содержанием на моей странице. Для моей страницы есть stlloader, поэтому я реализую прогресс загрузки xwalkview и прогресс загрузки stlloader.

Ход загрузки Xwalkview:

class ResourceClient extends XWalkResourceClient {
    public ResourceClient(XWalkView xwalkView) {
        super(xwalkView);
    }

    public void onLoadStarted(XWalkView view, String url) {
        mProgress = (ProgressBar) findViewById(R.id.progressBar);
        mProgress.setVisibility(View.VISIBLE);
        super.onLoadStarted(view, url);
        Log.d("INFO", "Load Started:" + url);
    }

    public void onLoadFinished(XWalkView view, String url) {
        super.onLoadFinished(view, url);
        Log.d("INFO", "Load Finished:" + url);
        bottomBar = (BottomBar) findViewById(R.id.bottomBar);
        mProgress = (ProgressBar) findViewById(R.id.progressBar);
        mProgress.setVisibility(View.GONE);
    }

    public void onProgressChanged(XWalkView view, int progressInPercent) {
        super.onProgressChanged(view, progressInPercent);
        Log.d("INFO", "Loading Progress:" + progressInPercent);
        mProgress = (ProgressBar) findViewById(R.id.progressBar);
        mProgress.setProgress(progressInPercent);
    }

прогресс загрузки stlloader:

      var loader = new THREE.STLLoader(manager);
      loader.load( "{{ $modelfilepath }}", function ( geometry ) {
          var meshMaterial = new THREE.MeshPhongMaterial( { color: 0xAAAAAA, specular: 0x111111, shininess: 200 } );
          if (geometry.hasColors) {
              meshMaterial = new THREE.MeshPhongMaterial({ opacity: geometry.alpha, vertexColors: THREE.VertexColors });
          }
          centerOffset = geometry.center();
          var mesh = new THREE.Mesh( geometry, meshMaterial );
          tV.z = (-geometry.boundingBox.min.z + geometry.boundingBox.max.z)/2;
          mesh.matrix.elements[14] = tV.z;
          mesh.castShadow = true;
          mesh.receiveShadow = true;
          mesh.matrixAutoUpdate = false;

          boundBox.setFromObject(mesh);
          if(!isFillin(boundBox.min, boundBox.max, machineLength))
          {
              mesh.material.color.setHex(0xff0000);
          }

          stlMesh = mesh;
          scene.add( mesh );
          objects.push(mesh);
          showPosition(0, 0, tV.z);
      }, function(progressItem) {
          $('#loaderstatus').html("Loading... " + (Math.round(progressItem.loaded / progressItem.total *100)) + "%");
      }, function(){

      });
Другие вопросы по тегам