1. 程式人生 > >Android進度條/等待載入——旋轉小圓點效果

Android進度條/等待載入——旋轉小圓點效果

進度條/等待載入——旋轉小圓點效果

1 效果圖

靜態圖片看不出效果,隨後更新文章,附上github地址。
這裡寫圖片描述
這裡寫圖片描述

2、思想

12個小圓點疊放(i=0,1,...11)
動畫一:依次從0度旋轉到30*i度
動畫二:依次從30*i度旋轉到360度
因為不牽扯使用者互動,所以用最基本的檢視動畫即可

3 佈局檔案

src\main\res\layout\activity_launch.xml

<RelativeLayout
        android:id="@+id/progress_dots_locus"
        android:layout_width="@dimen/px30"
android:layout_height="@dimen/px30" android:layout_centerInParent="true">
<!--<ImageView android:id="@+id/iv_dot" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:background="@drawable/shape_dot_white"/>-->
</RelativeLayout>

src\main\res\drawable\shape_dot_white.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <size
        android:height="@dimen/px3"
        android:width="@dimen/px3" />
    <solid
android:color="#ffffff" />
</shape>

4 程式碼實現

4.1 handler迴圈

//用於迴圈動畫的handler
public Handler animaLoopHandler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if(ANIMA_LOOP == msg.what){
                hasOneFinishCount = 0;
                hasTwoFinishCount = 0;
                startRotationAnimOneSet();
                //Log.d(TAG, "1handleMessage() called with: msg = [" + msg + "]");
            }
        }
    };

4.2 初始化小圓點,放於父控制元件頂部的中間為起始位置

/**
 * 初始化小圓點
 */
private void initProgressDots() {
    rlProgressDotsLocus.removeAllViews();
    for (int i = 0; i < DOT_COUNT; i++) {
        ImageView iv = new ImageView(LaunchActivity.this);
        iv.setBackgroundResource(R.drawable.shape_dot_white);

        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
                ViewGroup.LayoutParams.WRAP_CONTENT);

        params.addRule(RelativeLayout.CENTER_HORIZONTAL);
        rlProgressDotsLocus.addView(iv,params);
        ivDots.add(iv);
    }
}

4.3 動畫的開啟,監聽動畫1結束時繼續動畫2,監聽動畫2結束髮送迴圈訊息

/**
 * 開啟小圓點旋轉動畫1啊
 */
private void startRotationAnimOne(final ImageView iv, final float fromDegrees, final float toDegrees) {
    //以View的父控制元件中心點作為旋轉軸,建立旋轉度的動畫
    int pivotXType = Animation.ABSOLUTE;
    float pivotXValue = 0;
    int pivotYType = Animation.ABSOLUTE;
    float pivotYValue = 15;//父控制元件高度的一半
    Animation animation = new RotateAnimation(
            fromDegrees, toDegrees,
            pivotXType, pivotXValue,
            pivotYType, pivotYValue
    );
    //設定動畫持續時間
    animation.setDuration(DURATION_ANIM_ONE);
    //animation.setFillAfter(true);
    //animation.setRepeatCount(10);
    //通過View的startAnimation方法將動畫立即應用到View上
    iv.startAnimation(animation);

    animation.setAnimationListener(new Animation.AnimationListener() {
        @Override
        public void onAnimationStart(Animation animation) {
        }

        @Override
        public void onAnimationEnd(Animation animation) {
            //startRotationAnimTwo(iv, toDegrees, 360);
            hasOneFinishCount++;
            if(DOT_COUNT == hasOneFinishCount){
                startRotationAnimTwoSet();
            }
        }

        @Override
        public void onAnimationRepeat(Animation animation) {
        }
    });
}

/**
 * 開啟小圓點旋轉動畫2
 */
private void startRotationAnimTwo(ImageView iv,float fromDegrees, float toDegrees) {
    //以View的父控制元件中心點作為旋轉軸,建立旋轉度的動畫
    int pivotXType = Animation.ABSOLUTE;
    float pivotXValue = 2;
    int pivotYType = Animation.ABSOLUTE;
    float pivotYValue = 15;
    Animation animation = new RotateAnimation(
            fromDegrees, toDegrees,
            pivotXType, pivotXValue,
            pivotYType, pivotYValue
    );
    //設定動畫持續時間
    animation.setDuration(DURATION_ANIM_TWO);
    //animation.setFillAfter(true);
    //animation.setRepeatCount(10);
    //通過View的startAnimation方法將動畫立即應用到View上
    iv.startAnimation(animation);

    animation.setAnimationListener(new Animation.AnimationListener() {
        @Override
        public void onAnimationStart(Animation animation) {
        }

        @Override
        public void onAnimationEnd(Animation animation) {
            //startRotationAnimTwo(iv, toDegrees, 360);
            hasTwoFinishCount++;
            if(DOT_COUNT == hasTwoFinishCount){
                //迴圈
                animaLoopHandler.sendEmptyMessage(ANIMA_LOOP);
            }
        }

        @Override
        public void onAnimationRepeat(Animation animation) {
        }
    });
}

4.4 最後,記得在銷燬階段清空迴圈handler

@Override
protected void onDestroy() {
    super.onDestroy();
    //登出handler
    animaLoopHandler.removeCallbacksAndMessages(null);
}

就是這麼簡單,哈哈

相關推薦

Android進度/等待載入——旋轉圓點效果

進度條/等待載入——旋轉小圓點效果 1 效果圖 靜態圖片看不出效果,隨後更新文章,附上github地址。 2、思想 12個小圓點疊放(i=0,1,...11) 動畫一:依次從0度旋轉到30*i度 動畫二:依次從30*i度旋轉到360度 因為不

Android進度、自動提示框、下拉框動態資料載入

1.進度條實現 佈局檔案: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

Android與js互動,帶進度載入H5頁面

private void initWebView() { WebSettings settings = wvResumeDetail.getSettings(); //支援JavaScript指令碼語言 settings

Android SeekBar 進度 沙漏 載入

<SeekBar android:id="@+id/seek" android:layout_width="300px" android:layout_height="wrap_content"

ProgressViews-Android基於Canvas重繪處理的進度載入

ProgressViews Android 基於Canvas重繪處理的進度條,載入條 https://github.com/ccM

如何建立一個*毫無用處*的進度顯示載入進度- 皮這一下很開心

看了下風雲小Q的空間分享, 覺得很有意思 皮這一下很開心 真開心 #include<iostream> #include<cstdlib> #include<windows.h> using namespace std; /*一個毫無用處的程式*/

求助Android進度在音樂播放器中的使用方法

MainAvctivity.java ` package com.example.shinelon.myapplication; import android.app.Activity; import android.content.ComponentName; import and

iOS 8 WkWebView 網頁的配置和前進,後退,js 互動和進度載入

//  Created by 周雙建 on 15/12/21. //  Copyright © 2015年 周雙建. All rights reserved. // #import "ViewController.h" //要匯入其框架 #import <WebKit/WKWebView

android自定義圓形進度,實現動態畫圓效果

自定義圓形進度條效果圖如下:應用場景如動態顯示分數等。 view的自定義屬性如下attr.xml <?xml version="1.0" encoding="UTF-8"?> <resources> <declare-style

Android進度】三種方式實現自定義圓形進度ProgressBar

總結了3種方法: 1.多張圖片切換 2.自定義顏色 3.旋轉自定義圖片 其它: Android自定義控制元件NumberCircleProgressBar(圓形進度條)的實現:點選開啟連結 橫線帶數字進度條:點選開啟連結

自定義Android進度ProgressBar顏色的漸變設定

一、在drawable資料夾中新建my_progressbar.xml檔案 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.c

WebView 載入資料時顯示進度載入完後再把進度取消並顯示內容

轉載地址:http://blog.sina.com.cn/s/blog_7a66361301011a46.html webview 載入資料時顯示進度條有兩種. 第一種方法 這個是載入資料時顯示進度條 super.onCreate(savedInstanceState);

iOS 進度載入、安裝動畫 —— HERO部落格

iOS 進度條、載入、安裝動畫簡單實現。 首先看一下效果圖: 下面貼上程式碼: 控制器ViewController: #import <UIKit/UIKit.h> @interface ViewController : UIViewController

ProgressDialog+Thread實現進度非同步載入

實現流程 1、彈出進度條對話方塊 2、 執行執行緒,線上程中實現資料非同步載入 3、線上程資料載入完成後,呼叫Handler並集合資料,更新介面 實現功能程式碼例子://新增非同步操作

Android 自定義進度ColorfulProgressBar,原理簡單、效果很棒

Android-ColorfulProgressBar 簡介: 這是一個自定義的Progressbar,效果看著還行吧,滾動的雙色斜條作為進度條,有點類似Bootstrap風格。原生Progress的基本操作都有,自行觀摩我的原始碼吧,挺簡單的。

Android 仿微信重新整理旋轉風車 自定義view

不太會錄影,沒辦法,智慧截圖了 不多說了,直接上程式碼 package com.shipneg.demoysp.demo; import android.content.Context; import android.graphics.Bitmap;

Android進度樣式

源地址:http://blog.csdn.net/tianyitianyi1/article/details/7563027?locationNum=2&fps=1 android 進度條的樣式   例1:(預設樣式(中等圓形)) Xml程式碼  <Pr

unity3d實現Loading進度非同步載入場景

         一款大型遊戲,開始遊戲載入場景的時候一般都帶有進度條載入模式,這將與進度條載入速度同步來載入場景。如果沒有了進度條,我們開始遊戲或者進入下一個場景的時候,因為電腦要載入大場景需要一定

Bootstrap基礎7(標簽、徽章、大屏展播、頁面標題、縮略圖、進度、面板、折疊效果

footer ctype success htm header bit src int get <!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-

Android學習---使用非同步內部類實現進度載入效果

Android學習—使用非同步內部類 為什麼要用AsyncTask? 答:我們可以用上述兩種方法來完成我們的非同步操作,加入要我們寫的非同步操作比較多,或者較為繁瑣, 難道我們new Thread()然後用上述方法通知UI更新麼?程式設計師都是比較喜歡偷懶的,既然官方給我 們