網路請求載入控制元件的簡單實現,能顯示載入中、沒網路、載入失敗點選重新載入等狀態
網路請求經常需要用到載入的一個動畫,有這麼幾種狀態:
1、正在載入中,顯示一個動畫。
2、載入成功,則動畫消失。
3、沒網路,則點選能直接開啟設定進行網路設定。
4、載入失敗,則點選能重新載入。
載入控制元件效果如下:
因為使用頻率很高,所以寫了一個控制元件,把這麼些基本的操作給融合進去,需要用到的地方,只需要新增這個控制元件,並設定相應的狀態就可以了,其他的事情希望控制元件本身能自己完成。以下為實現過程:
一、載入控制元件佈局layout下,load_status.xml:
其中涉及到的幾個資源如下:<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#00ffffff" android:padding="0dp" android:gravity="center" android:orientation="horizontal"> <ImageView android:id="@+id/iv_load_anim" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/loading_anim"/> <TextView android:id="@+id/tv_load_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="12sp" android:paddingStart="5dp" android:paddingEnd="5dp" android:textColor="@drawable/load_status_text_selector" android:maxLines="1" android:ellipsize="end" android:text="@string/load_status_loading"/> </LinearLayout>
drawable下,loading_anim.xml:
drawable下,load_status_text_selector.xml:<?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false" > <item android:drawable="@drawable/loading_anim_00" android:duration="85"/> <item android:drawable="@drawable/loading_anim_01" android:duration="85"/> <item android:drawable="@drawable/loading_anim_02" android:duration="85"/> <item android:drawable="@drawable/loading_anim_03" android:duration="85"/> <item android:drawable="@drawable/loading_anim_04" android:duration="85"/> <item android:drawable="@drawable/loading_anim_05" android:duration="85"/> </animation-list>
string.xml中新增:<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="false" android:color="#000000"> </item> <item android:state_pressed="true" android:color="#7f000000"> </item> <item android:color="#000000"> </item> </selector>
<string name="load_status_loading">正在載入中</string>
<string name="load_status_no_net">沒有網路</string>
<string name="load_status_fail_refresh">載入失敗,點選重新載入</string>
二、載入控制元件實現,原理看程式碼體會,LoadStatusView.java:
package com.ldw.widget;
import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.AnimationDrawable;
import android.util.AttributeSet;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;
import com.ldw.test.R;
import com.ldw.utils.NetUtil;
/**
* LoadStatus佈局的操作幫助類
* Created by ldw on 2017/12/7.
*/
public class LoadStatusView extends FrameLayout implements View.OnClickListener {
public static int STATUS_LOADING = 1;
public static int STATUS_NO_NET = 2;
public static int STATUS_FAIL_REFRESH = 3;
public static int STATUS_HIDE = 4;
private ImageView ivLoadStatus;
private TextView tvLoadStatus;
private AnimationDrawable loadAnimationDrawable;
public LoadStatusView(Context context) {
this(context, null);
}
public LoadStatusView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public LoadStatusView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init(){
View.inflate(getContext(), R.layout.load_status, this);
setClickable(true);//這個是為了不讓點選穿透到下層介面去,以免下層的控制元件看不見卻莫名其妙的響應了
ivLoadStatus = findViewById(R.id.iv_load_anim);
tvLoadStatus = findViewById(R.id.tv_load_text);
loadAnimationDrawable = (AnimationDrawable) ivLoadStatus.getBackground();
tvLoadStatus.setOnClickListener(this);
}
public void setLoading(){
setVisibility(View.VISIBLE);
ivLoadStatus.setVisibility(VISIBLE);
tvLoadStatus.setVisibility(VISIBLE);
loadAnimationDrawable.start();
tvLoadStatus.setText(getResources().getString(R.string.load_status_loading));
tvLoadStatus.setClickable(false);
tvLoadStatus.setEnabled(false);
}
public void setNoNet(){
setVisibility(View.VISIBLE);
ivLoadStatus.setVisibility(GONE);
tvLoadStatus.setVisibility(VISIBLE);
tvLoadStatus.setText(getResources().getString(R.string.load_status_no_net));
tvLoadStatus.setClickable(true);
tvLoadStatus.setEnabled(true);
}
public void setFailRefresh(){
setVisibility(View.VISIBLE);
ivLoadStatus.setVisibility(GONE);
tvLoadStatus.setVisibility(VISIBLE);
tvLoadStatus.setText(getResources().getString(R.string.load_status_fail_refresh));
tvLoadStatus.setClickable(true);
tvLoadStatus.setEnabled(true);
}
public void setHide(){
setVisibility(View.GONE);
tvLoadStatus.setClickable(false);
tvLoadStatus.setEnabled(false);
}
@Override
public void onClick(View v) {
if(v == tvLoadStatus){
if(NetUtil.getNetworkState(getContext()) == NetUtil.NETWORK_NONE){
openSettings();
}else{
if(onRefreshListener != null){
onRefreshListener.onRefreshListener();
}
}
}
}
/**
* 設定點選重新整理監聽
* @param listener listener
*/
public void setOnRefreshListener(OnRefreshListener listener) {
onRefreshListener = listener;
}
/**
* 開啟設定
*/
private void openSettings(){
Intent intent = new Intent();
intent.setAction(android.provider.Settings.ACTION_SETTINGS);
getContext().startActivity(intent);
}
OnRefreshListener onRefreshListener = null;
public interface OnRefreshListener{
void onRefreshListener();
}
}
這裡除了給出幾個設定狀態的介面外,還在適當的時候自動開啟設定進行網路設定,文字可以點選時才有點選效果,還增加了重新載入的介面。裡面涉及到另一個網路判斷的工具類,也非常簡單,在另一篇博文有 http://blog.csdn.net/lin_dianwei/article/details/78741293
三、Activity中的使用很簡單:
在需要用到的佈局新增該控制元件:
<com.ldw.widget.LoadStatusView
android:id="@+id/lsv_load_status"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone"
android:background="@color/colorBackground">
</com.ldw.widget.LoadStatusView>
Activity中使用:mLoadStatusView = (LoadStatusView) findViewById(R.id.lsv_load_status);
mLoadStatusView.setOnRefreshListener(new LoadStatusView.OnRefreshListener() {
@Override
public void onRefreshListener() {
//重新載入操作在這裡
}
});
//設定載入控制元件狀態
mLoadStatusView.setLoading();
果然用起來清爽多了!
相關推薦
網路請求載入控制元件的簡單實現,能顯示載入中、沒網路、載入失敗點選重新載入等狀態
網路請求經常需要用到載入的一個動畫,有這麼幾種狀態: 1、正在載入中,顯示一個動畫。 2、載入成功,則動畫消失。 3、沒網路,則點選能直接開啟設定進行網路設定。 4、載入失敗,則點選能重新載入。 載入控制元件效果如下: 因為使用頻率很高,所以寫了一個控制元件,把這麼些基本
不用splitter控制元件 簡單實現對mfc對話方塊的分割的方法
不用splitter控制元件 簡單實現對mfc對話方塊的分割的方法 直接貼上原始碼主要部分吧 這個是基於對話方塊的工程 進行對話方塊的分割實現 只是相應了三個訊息函式,看一下就會明白的 我空間資源裡邊有現成的工程程式碼可以下載執行 .cpp 檔案 // spliteDl
Android拖動控制元件的實現,自定義可拖動的LinearLayout
工作內容; 1.拖動控制元件 2.自定義可拖動的LinearLayout 學習分享: 一、拖動控制元件的實現步驟: 【前提:控制元件在RelativeLayout中,或者在GridLayout中】 1.按下圖搞懂幾個座標 檢視寬度 view.getWidth(); 檢視高
Winform非同步等待控制元件簡單實現
思路 BaseForm類繼承Form class:通過拓展BaseForm類新增控制元件,使用時繼承BaseForm 等待控制元件作用: 禁用主窗體控制元件; 顯示進度條控制元件 非同步呼叫: try{} finally{}進行控制元件的回收 實
android 動態設定控制元件的高度,使用對應佈局中的dp值
1. 獲取你要進行改變的控制元件的佈局 LinearLayout.LayoutParams linearParams =(LinearLayout.LayoutParams) myView.getLayoutParams(); 2.設定佈局的高度 後面的引數就是對應
Qt 中實現在控制元件中點選滑鼠,就在滑鼠點選處載入圖片的方法
首先應該知道,QLabel類是沒有點選事件的。我們需要點選滑鼠,那麼必須重寫一個QLabel類去繼承原來的QLabel。比如說我定義PutPicLabel來繼承QLabel。 在標頭檔案中應該這麼寫: #ifndef PUTPICLABEL_H #define PUTPI
duilib中將xml封裝為控制元件簡單示例(簡單自定義控制元件,封裝幾個基本控制元件合為1個自定義控制元件)
使用duilib的時候,難免會有這樣的需求: 某一塊Container(Layout)以及裡面的佈局需要重複用,不想每次都複製貼上這麼多,要不然xml太大了; 通過繼承來自定義一個控制元件,比如CButtonUIEx之類的,想讓他像button一樣在xml中被識別; xml裡面的東西
iOS 開發 WKWebView載入網頁,對網頁控制元件進行更改,使用OC新增JS
//獲取載入的網頁 - (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void
一個簡單好用的下拉重新整理、上拉載入控制元件
*本篇文章已授權微信公眾號 guolin_blog (郭霖)獨家釋出 有更新: 最新的庫版本為1.0.2(相容舊版本,舊版本是1.0.0),完整的庫地址: compile'com.zt.maven.widget:refreshview:1.0.2
Android橫向滑動載入更多的控制元件的實現---HorizontalScrollSlideView
Android橫向滑動載入更多的控制元件的實現—HorizontalScrollSlideView 需求 之前公司業務要求做一個橫向滑動的,可以載入更多的控制元件,第一時間想到的就是 RecyclerView 來實現 ,後面仔細想想滑動攔截不好控制等等
VB.NET實現動態載入控制元件陣列
vb.net中沒有控制元件陣列,它也不主張用控制元件陣列,因為它對記憶體的開銷非常大。控制元件陣列問題在.NET中完全有其它方法代替。如果一定要用 for i as integer to 20
自定義view動態載入控制元件實現動態換行
自定義view動態載入控制元件 先來講下需求吧,可能我們開發中會遇到這樣的場景,需要在一個父容器里加載多個子view,但是,子view的排版又有特殊要求,比如自適應螢幕寬度或者高度等,這樣以來原本的控制元件無法滿足需要了。先看下圖的實現效果,介面有些粗糙,
Android自定義控制元件實戰——實現仿IOS下拉重新整理上拉載入 PullToRefreshLayout
下拉重新整理控制元件,網上有很多版本,有自定義Layout佈局的,也有封裝控制元件的,各種實現方式的都有。但是很少有人告訴你具體如何實現的,今天我們就來一步步實現自己封裝的 PullToRefreshLayout 完美的解決下拉重新整理,上拉載入問題。
JS利用ActiveX控制元件的方式,即 Excel.Application,實現對word或者excel的列印
實現過程:先將需要列印的資料匯入到word或者excel中,再利用word或者excel的列印功能來實現web列印。 下面以excel為例實現如何列印的過程 將網頁中資料匯入excel中的方法有很多,這裡先介紹一種,利用ActiveX控制元件的方式,即 Exce
RecyclerView實現下拉重新整理與自動載入控制元件封裝
CommonAdapter.java public abstract class CommonAdapter<T> extends RecyclerView.Adapter<ViewHolder> { protected Context mContext; prot
okhttp,讓你的網路請求變得更加簡單。
我們後端在工作中,可能接觸最多的無非是介面請求了,之前用的最多的是httpclient,後來通過一系列的對比可以發現,okhttp比httpclient更加優秀。因此,寫了OkHttp-FastJson,一個讓網路請求更簡單的框架。 OkHttp-Fast
python3 簡單實現從csv文件中讀取內容,並對內容進行分類統計
tmp spa writer ict 打開文件 while 類型 spl blog 新手python剛剛上路,在實際工作中遇到如題所示的問題,嘗試使用python3簡單實現如下,歡迎高手前來優化import csv #打開文件,用with打開可以不用去特意關閉file了
CCombobox控制元件修改編輯框游標顯示位置,呈現:上下垂直狀態
使用MFC中系統CCombobox控制元件中CBN_DROPDWON風格時,edit編輯控制元件的高度的游標一直處於左上角位置。 效果如下圖所示: 其實,想要實現游標處於垂直狀態,如下圖所示: 這種效果看著就比較順眼了。 在此,有人想要問,怎麼改變編輯框的高度呢?
重繪ListCtrl中增加子控制元件Edit是,在父控制元件失去焦點時,子控制元件不進行隱藏
問題:現在有一個listctrl控制元件,需要在某一列上新增一個子控制元件edit。當點選子控制元件(edit)時,子控制元件顯示出來,父控制元件(ListCtrl)已經失去焦點了。此時,要是滑鼠點選的位置不在該控制元件內,edit處於顯示狀態,父控制元件(ListCtrl)是失去焦點狀態。
VS2010-MFC:單文件左側可停靠對話方塊(包含樹控制元件)的實現
在程式開發中我們經常看見有一些軟體左側有目錄樹或者是圖層樹,點選之後就可以右側View視窗顯示相關的內容,其實實現這種機制有兩種方法,第一種就是對MFC的View視窗進行視窗分割,左側的視窗view類派生於CTreeView,其中CTreeView自帶一個變數用於View中的樹控制元件的控制。第二