2015-09-17 8 views
2

Я реализовал значок загрузки вращателя, используя следующую схему:Пользовательский значок загрузки вертушка

<RelativeLayout 
    android:id="@+id/spinner" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="center_horizontal" 
    android:layout_marginTop="50dp"> 

    <ProgressBar 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:indeterminate="true" 
     /> 

</RelativeLayout> 

Но это по умолчанию использует Android блесну в. Я хочу, чтобы заменить блесну со значком загрузки я получил от preloaders.net, который выглядит следующим образом:

enter image description here

Как я могу заменить по умолчанию для Android блесну с персонализированной блесной в?

+0

полезно для и https://github.com/rahatarmanahmed/CircularProgressView –

+0

@NaveenTamrakar Это не помогает. Я не вижу возможности установить пользовательский загрузочный образ. – user5345059

ответ

0

Я рекомендую воспользоваться this variant. Честно говоря, ваш счетчик и не так круто, чтобы сделать его 1 к 1.

Если вы не можете найти нормальное решение. Вы можете сделать свой просмотр.

class DrawThread extends Thread{ 
    private boolean runFlag = false; 
    private SurfaceHolder surfaceHolder; 
    private Bitmap picture; 
    private Matrix matrix; 
    private long prevTime; 

    public DrawThread(SurfaceHolder surfaceHolder, Resources resources){ 
     this.surfaceHolder = surfaceHolder; 

     picture = BitmapFactory.decodeResource(resources, R.drawable.spinner); 

     matrix = new Matrix(); 
     matrix.postScale(3.0f, 3.0f); 
     matrix.postTranslate(100.0f, 100.0f); 

     prevTime = System.currentTimeMillis(); 
    } 

    public void setRunning(boolean run) { 
     runFlag = run; 
    } 

    @Override 
    public void run() { 
     Canvas canvas; 
     while (runFlag) { 
      long now = System.currentTimeMillis(); 
      long elapsedTime = now - prevTime; 
      if (elapsedTime > 30){ 
       prevTime = now; 
       matrix.preRotate(2.0f, picture.getWidth()/2, picture.getHeight()/2); 
      } 
      canvas = null; 
      try { 
       canvas = surfaceHolder.lockCanvas(null); 
       synchronized (surfaceHolder) { 
        canvas.drawColor(Color.BLACK); 
        canvas.drawBitmap(picture, matrix, null); 
       } 
      } 
      finally { 
       if (canvas != null) { 
        surfaceHolder.unlockCanvasAndPost(canvas); 
       } 
      } 
     } 
    } 
} 

public class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback { 
    private DrawThread drawThread; 

    public MySurfaceView(Context context) { 
     super(context); 
     getHolder().addCallback(this); 
    } 

    @Override 
    public void surfaceChanged(SurfaceHolder holder, int format, int width, 
      int height) { 
    } 

    @Override 
    public void surfaceCreated(SurfaceHolder holder) { 
     drawThread = new DrawThread(getHolder(), getResources()); 
     drawThread.setRunning(true); 
     drawThread.start(); 
    } 

    @Override 
    public void surfaceDestroyed(SurfaceHolder holder) { 
     boolean retry = true; 
     drawThread.setRunning(false); 
     while (retry) { 
      try { 
       drawThread.join(); 
       retry = false; 
      } catch (InterruptedException e) { 
      } 
     } 
    } 
} 
0

это то, что я использовал в моем проекте:

<ProgressBar 
     android:id="@+id/updateProgressBar" 
     android:layout_width="40dp" 
     android:layout_height="40dp" 
     android:drawingCacheQuality="high" 
     android:indeterminateDuration="2000" 
     android:indeterminateDrawable="@drawable/splash_spinner" 
     /> 

просто переопределить indeterminateDrawable с пользовательским изображением

+0

Как вы его закрутите? Можете ли вы использовать gifs? – user5345059

+0

он вращается на своем. вам просто нужен простой png, а ProgressBar позаботится о ротации – injecteer

Смежные вопросы