澳门威利斯人_威利斯人娱乐「手机版」

来自 网络资讯 2020-02-27 05:25 的文章
当前位置: 澳门威利斯人 > 网络资讯 > 正文

Android可切换状态的Button,iOS异步任务进度加载提

几天前,在有些网址上来看下图的一个动漫效果,以为挺不错的,所以来兑现一下

DMProgressHUD是一款用于体现异步操作职务进程景况的视图工具。该工具包括了脚下相比主流的加载状态视图类型,后续会基于具体情形或必要开展迭代。DMProgressHUD从准备等级次序的角度来看,其富含了5种显示情势:

那篇小说将解析连串ProgressBar的宗旨及体制

图片 193F0B7ECCE4558A01800893FBCD5BB42.gif

  1. Loading;
  2. Progress;
  3. Status(状态相关,比如成功、败北等唤醒State of Qatar;
  4. Text;
  5. Custom。

一时应用场境:

compileSdkVersion 24
targetSdkVersion 24
Theme.AppCompat.Light
appcompat-v7:25.3.1

效果

图片 2GIF.gif

方案1:CocoaPods

  1. 在Podfile文件插手 pod 'DMProgressHUD';
  2. 在终极输入 pod install;
  3. 在急需采纳之处导入头文件 #import <DMProgressHUD.h>
先来探访系统ProgressBar的存在延续布局

图片 3

ProgressBar世襲自View,不足为奇的子类包蕴SeekBar及RatingBar

By default, the progress bar is a spinning wheel (an indeterminate indicator).
进程条暗中同意景况下为无进度圆形样式
设若改成条形XML中利用style="@android:style/Widget.ProgressBar.Horizontal"

咱们来证实一下

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@ id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <ProgressBar
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

android24模拟器展现效果:

图片 4

1.gif

不过在android19模拟器上的成效为:

图片 5

2.gif

更玄妙的是android19模拟器上改换一下背景颜色:

图片 6

3.gif

尽管暗许都以无进程的圆形,然而意义为啥不近似?

品种地址

赏识的给的star哦

图片 7D382565CA8F70B2543C25B1939EEC31F.jpg

这里做了有个别更动,平常的话大家恳请无法得到消息具体的快慢,所以将进度条换到了解则转圈。

方案2:间接导入到工程

  1. 把DMProgressHUD.h、DMProgressHUD.m和DMProgressImgs.bundle(图片能源bundle卡塔尔导入到工程目录下;
  2. 在供给选用的地点导入头文件 #import "DMProgressHUD.h"

只顾:快速调用使用默许的体裁(Style-Dark卡塔尔、动漫(Animation-gradient卡塔尔(قطر‎、掩盖(Mask-None卡塔尔国。

焦点样式原码解析

至于Activity是怎么样加载对应的宗旨,请参见:https://www.cnblogs.com/chenxibobo/p/6136681.html
总的来讲最后调用Resources中的selectSystemTheme函数。

    Resources.java
    public static int selectDefaultTheme(int curTheme, int targetSdkVersion) {
        return selectSystemTheme(curTheme, targetSdkVersion,
                com.android.internal.R.style.Theme,
                com.android.internal.R.style.Theme_Holo,
                com.android.internal.R.style.Theme_DeviceDefault,
                com.android.internal.R.style.Theme_DeviceDefault_Light_DarkActionBar);
    }

    public static int selectSystemTheme(int curTheme, int targetSdkVersion, int orig, int holo,
            int dark, int deviceDefault) {
        if (curTheme != 0) {//如果设置了主题,直接返回
            return curTheme;
        }
        //没有设置的情况下,如果targetSdkVersion 小于11则返回R.style.Theme
        if (targetSdkVersion < Build.VERSION_CODES.HONEYCOMB) {
            return orig;
        }
        //targetSdkVersion 如果小于14则返回R.style.Theme_Holo
        if (targetSdkVersion < Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
            return holo;
        }
        //targetSdkVersion 如果小于24则返回R.style.Theme_DeviceDefault
        if (targetSdkVersion < Build.VERSION_CODES.N) {
            return dark;
        }
        return deviceDefault;//返回R.style.Theme_DeviceDefault_Light_DarkActionBar
    }

咱俩当下安装了宗旨,并且核心为Theme.AppCompat.Light。

appcompat-v7包 values.xml

    //对于父类主题,不同Android版本对应不同版本的values.xml,查看下图
    <style name="Theme.AppCompat.Light" parent="Base.Theme.AppCompat.Light"/>
    <style name="Base.Theme.AppCompat.Light" parent="Base.V7.Theme.AppCompat.Light">
    //Theme.AppCompat.Light主题,最终都会采用该主题,下面会具体分析
    <style name="Base.V7.Theme.AppCompat.Light" parent="Platform.AppCompat.Light">
    </style>

翻看Base.Theme.AppCompat.Light,不相同Android版本对应相应的values.xml

图片 8

image.png

appcompat-v7包 values-v23.xml

    <style name="Base.Theme.AppCompat.Light" parent="Base.V23.Theme.AppCompat.Light"/>
    <style name="Base.V23.Theme.AppCompat.Light" parent="Base.V22.Theme.AppCompat.Light">
      ...
    </style>

appcompat-v7包 values-v22.xml

    <style name="Base.Theme.AppCompat.Light" parent="Base.V22.Theme.AppCompat.Light"/>
    <style name="Base.V22.Theme.AppCompat.Light" parent="Base.V21.Theme.AppCompat.Light">
       ...
    </style>

appcompat-v7包 values-v21.xml

    <style name="Base.Theme.AppCompat.Light" parent="Base.V21.Theme.AppCompat.Light"/>
    <style name="Base.V21.Theme.AppCompat.Light" parent="Base.V7.Theme.AppCompat.Light">
       ...
    </style>

终极达到早先提到的 appcompat-v7包 values.xml

    //Theme.AppCompat.Light主题,最终都会采用该主题
    <style name="Base.V7.Theme.AppCompat.Light" parent="Platform.AppCompat.Light">
    </style>

查看Platform.AppCompat.Light

图片 9

11.png

使用

由此setProgress(int progressState of Qatar方法来退换状态。progress == 0;//普通状态progress == 50;//加载状态progress == 100;//完场状态progress == -1;//错误状态

1.Loading Mode

瞩目,这里便是为啥分化android 版本显得的成效不一致的缘由。

appcompat-v7包 values-v25.xml

    <style name="Platform.AppCompat.Light" parent="Platform.V25.AppCompat.Light"/>
    <style name="Platform.V25.AppCompat.Light" parent="android:Theme.Material.Light.NoActionBar">
    </style>

appcompat-v7包 values-v21.xml

    <style name="Platform.AppCompat.Light" parent="Platform.V21.AppCompat.Light"/>
    <style name="Platform.V21.AppCompat.Light" parent="android:Theme.Material.Light.NoActionBar">
       ...
    </style>

自定义样式

//文字内容pb_normalText pb_completeTextpb_errorTextpb_progressText//文字颜色pb_normalTextColorpb_completelTextColorpb_errorTextColor

pb_normalBackgroundColorpb_errorBackgroundColorpb_completeBackgroundColorpb_progressColorpb_progress_indicator_colorpb_progress_indicator_background_color

eg:改造实现情状开关颜色

<?xml version="1.0" encoding="utf-8"?><selector xmlns:andro> <item android:state_pressed="true" android:color="@color/pb_complete_background_dark"/> <item android:state_focused="true" android:color="@color/pb_complete_background_dark"/> <item android:state_enabled="false" android:color="@color/pb_background_not_enable"/> <item android:state_enabled="true" android:color="@color/pb_complete_background"/></selector>

再正是,还支持实现/错误状态图片展现,通过安装

pb_iconErrorpb_iconComplete

当存在图片时,会先行呈现图片。

1.1 Loading-Indicator

图片 10loading_indicator.gif

 DMProgressHUD *hud = [DMProgressHUD showLoadingHUDAddedTo:self.view]; //hud.loadingType = DMProgressHUDLoadingTypeIndicator;//默认 hud.text = @"Here's info"; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ //异步耗时操作 [self doSomething]; dispatch_async(dispatch_get_main_queue(), ^{ //返回主线程隐藏HUD [hud dismiss]; }); });
5.0及以上主旨为android:Theme.Material

appcompat-v7包 values-v14.xml

    <style name="Platform.AppCompat.Light" parent="Platform.V14.AppCompat.Light"/>
    <style name="Platform.V14.AppCompat.Light" parent="Platform.V11.AppCompat.Light">
      ...
    </style>

appcompat-v7包 values-v11.xml

    <style name="Platform.AppCompat.Light" parent="Platform.V11.AppCompat.Light"/>
    <style name="Platform.V11.AppCompat.Light" parent="android:Theme.Holo.Light">
      ...
    </style>

本文由澳门威利斯人发布于网络资讯,转载请注明出处:Android可切换状态的Button,iOS异步任务进度加载提

关键词: 提示 加载 状态 Android Button