Android 端天氣預報APP的實現(一)天氣顯示介面之上下滑動
最近參加了一個小比賽,選了天氣預報APP這個題目,最初選擇它,是想練練網路資料獲取和資料解析方面的知識,後來發現倒是學到了不少介面的東西。下面我來一步步講解一下我是怎麼完成的吧~
首先,天氣預報最直觀的部分應該就是天氣顯示介面了,這裡,我想做成可以有上下滑動的效果的介面,因此我使用了RecyclerView控制元件,它的使用方式為:
1.首先在自己的專案中新增依賴(Android Studio)
file–>project structure–>找到相應的專案–>dependencies–>”+”–>找到recyclerview–>點選OK即可。
2.建立xml佈局 layout_main.xml,在佈局中使用RecyclerView控制元件即可。
layout_main.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width ="match_parent"
android:layout_height="match_parent"
android:background="#0000">
</FrameLayout>
3.設定好了佈局後,下面就可以去MainActivity.java檔案中去操作它了。
//1. 獲取控制元件
RecyclerView mRecyclerView = view.findViewById(R.id.recyclerView);
//2. 設定控制元件中item的排列方向
LinearLayoutManager layoutManager = new LinearLayoutManager(MainActivity.this );
//設定為垂直排列,即上下排列
layoutManager.setOrientation(OrientationHelper.VERTICAL);
4.獲取了recyclerview之後,我們需要知道,我們之所以選擇一個可滑動的控制元件,就是想讓它能夠完成滑動效果,因此在該控制元件內,我又寫了兩個佈局來填充該控制元件。分別是content_weather_info.xml和content_life_info.xml
content_weather_info.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:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="2"
android:layout_gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/temperature"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="3"
android:gravity="center|bottom"
android:textColor="@color/textColor"
android:textSize="100sp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="2"
android:orientation="horizontal"
android:gravity="center|top">
<TextView
android:id="@+id/weatherType"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/textColor"
android:textSize="25sp"
android:layout_marginEnd="10dp"
android:layout_marginTop="7dp"/>
<TextView
android:layout_width="2dp"
android:layout_height="30dp"
android:background="@color/textColor" />
<TextView
android:id="@+id/quality"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/textColor"
android:textSize="25sp"
android:layout_marginStart="10dp"
android:layout_marginTop="7dp"/>
</LinearLayout>
</LinearLayout>
<ListView
android:id="@+id/weather_list"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="3"
android:divider="@null"
android:fastScrollEnabled="false"/>
</LinearLayout>
content_life_info.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<GridView
android:id="@+id/gridView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:numColumns="4"
android:layout_marginBottom="10dp"
android:layout_marginTop="10dp">
</GridView>
<TextView
android:id="@+id/tv_tips"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/tips"
android:layout_margin="10dp"
android:textSize="15sp"
android:typeface="serif"
android:textColor="@color/textColor"
android:layout_marginStart="10dp"
android:layout_below="@id/gridView"/>
<ListView
android:id="@+id/list_life_info"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentBottom="true"
android:layout_below="@id/tv_tips">
</ListView>
</RelativeLayout>
5.接下來我們需要為recyclerview設定介面卡。
/**
* Created by zhaoxin on 17/9/1.
* recyclerView的介面卡
*/
public class MyRecyclerAdapter extends RecyclerView.Adapter {
//上下文
private Context mContext;
//載入佈局的物件
private LayoutInflater mInflater;
//兩個常量分別代表recyclerView中新增的佈局
private static final int CONTENT_WEATHER_INFO = 1;
private static final int CONTENT_LIFE_INFO = 2;
//通過構造器初始化成員變數
public MyRecyclerAdapter(Context context) {
this.context = context;
}
/**
* 建立ViewHolder,如果有多個不同的佈局,需要與getItemViewType配合使用
*/
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//通過判斷view的型別建立不同的viewHolder
if (viewType == CONTENT_WEATHER_INFO) {
return new MyContentWeatherInfo(mInflater.inflate(R.layout.content_weather_info, parent, false));
} else {
return new MyContentLifeInfo(mInflater.inflate(R.layout.content_life_info, parent, false));
}
}
/**
* 用來判斷當前的view是哪一個佈局
*/
@Override
public int getItemViewType(int position) {
return position == 0 ? CONTENT_WEATHER_INFO : CONTENT_LIFE_INFO;
}
/**
* 繫結每一個ViewHolder,併為其包含的控制元件設定資料
*/
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
}
/**
* 顯示佈局的個數
*/
@Override
public int getItemCount() {
return 2;
}
private class MyContentWeatherInfo extends RecyclerView.ViewHolder {
private TextView mTvTemperature;
private TextView mTvWeatherType;
private TextView mTvQuality;
private ListView mWeatherList;
MyContentWeatherInfo(View itemView) {
super(itemView);
mTvTemperature = itemView.findViewById(R.id.temperature);
mTvWeatherType = itemView.findViewById(R.id.weatherType);
mTvQuality = itemView.findViewById(R.id.quality);
mWeatherList = itemView.findViewById(R.id.weather_list);
}
}
private class MyContentLifeInfo extends RecyclerView.ViewHolder {
private GridView mGridView;
private ListView mListView;
MyContentLifeInfo(View itemView) {
super(itemView);
mGridView = itemView.findViewById(R.id.gridView);
mListView = itemView.findViewById(R.id.list_life_info);
}
}
}
然後在MainActivity.java檔案中將建立的介面卡設定到recyclerview的控制元件上即可。
MyRecyclerAdapter mMyRecyclerAdapter = new MyRecyclerAdapter(MainActivity.this); mRecyclerView.setLayoutManager(layoutManager);
mRecyclerView.setAdapter(mMyRecyclerAdapter);
至此,天氣顯示介面就可以實現上下滑動的效果了。
相關推薦
Android 端天氣預報APP的實現(一)天氣顯示介面之上下滑動
最近參加了一個小比賽,選了天氣預報APP這個題目,最初選擇它,是想練練網路資料獲取和資料解析方面的知識,後來發現倒是學到了不少介面的東西。下面我來一步步講解一下我是怎麼完成的吧~ 首先,天氣預報最直觀的部分應該就是天氣顯示介面了,這裡,我想做成可以有上下滑動的
Android 音樂播放器的實現(一)自定義按鈕的實現
Android 系統提供了MediaPlayer控制元件,讓我們能夠利用它實現音訊的播放。 而從學Android開始,在看教程的時候,我就想,我要自己做一個音樂播放器,因為一個完整的音樂播放器是有很多功能的,它涉及到很多方面的知識,可以幫助我們更好地學習和掌握關於Andro
免費天氣API Android實現(一)
要實現功能簡述:1:通過對API介面的解析,首先實現全國所有城市的列表解析 API介面網址http://flash.weather.com.cn/wmaps/xml/china.xml 其中通過改變xml/後的引數實現省、市、縣的獲取。 2:通過API介面的解析,獲取所要查
Android項目實戰(十六):QQ空間實現(一)—— 展示說說中的評論內容並有相應點擊事件
con toast short demo append 集合 obj parent 自帶 原文:Android項目實戰(十六):QQ空間實現(一)—— 展示說說中的評論內容並有相應點擊事件大家都玩QQ空間客戶端,對於每一個說說,我們都可以評論,那麽,對於某一條評論:
android中的跨程序通訊的實現(一)——遠端呼叫過程和aidl
android在設計理念上強調元件化,元件之間的依賴性很小。我們往往發一個intent請求就可以啟動另一個應用的activity,或者一個你不知道在哪個程序的service,或者可以註冊一個廣播,只要有這個事件發生你都可以收到,又或者你可以查詢一個contentProvider獲得你想要的資料,這其
Dubbo/Dubbox的dubbo協議實現(一)-服務端啟動
之前已經分析的dubbo的服務的發現和註冊,這裡先看一下dubbo協議是如何實現的,之前已經知道了,呼叫DubboProtocol類的export來暴露服務的,協議實現比較複雜,這裡只關係主體實現即排除一些特性功能的處理程式碼 本章主要處理服務端對應的暴露流程
Android二維碼掃描開發(一):實現思路與原理
【 回覆“ 1024 ”,送你一個特別推送 】 現在二維碼已經非常普及了,那麼二維碼的掃描與處理也成為了Android開發中的一個必要技能。網上有很多關於Android中二維碼處理的帖子,大都是在講開源框架zxing用法,然後貼貼程式碼就完了,並沒有一個系統的分析和
Android練習專案 Mp3播放器實現(一)
對於Android的學習,需要掌握的東西有點多,需要我們認真,小心,不斷的進取。前天突然有個想法,覺得Mp3播放器是一個可以練習的專案,於是在網上搜了下,發現有人已經寫了部落格,看了他們的部落格後,我覺得他們說的一點很對,Mp3播放器基本用到了Android裡面
Android BLE 藍芽學習總結(一):手機作為周邊BluetoothGattServer的實現
低功耗藍芽的基本概念: 在BLE協議中,有兩個角色,周邊(Periphery)和中央(Central)。周邊是資料的提供者,中央是資料的使用和處理者。在Android SDK裡面,Android4.3以後手機可以作為中央使用;Android5.0以後手機才可以
android圖片裁剪拼接實現(一):Matrix基本使用
一、前文 之前有個朋友委託我實現一個圖片拼接的元件,感覺挺有意思,於是週末花了些時間去研究了下,其實拼接這一步並不難,但是我在研究中發現了Matrix這個東西,非常好的東西。為此,我竟然拾起了多年沒有動過的線性代數。 二、原理 要徹底搞懂mat
VR Android播放器實現(一)
最近正在研究一款VR視訊播放器,需要通過rtsp直連到相機端,相機採用的雙鏡頭,直接出來的兩個畫面拼接的一路視訊流,播放器要把左右畫面分別在螢幕上左右部分分別顯示,還要實現陀螺儀的轉動以及後期新增魚眼
Android開發,MapBox的使用及部分功能實現(一)----- 初始化、標記、定位、styleurl
近期,應公司要求,開始接觸MapBox For Android的開發。 經過初步的接觸,發現MapBox與我之前使用的Arcgis有很多不同,相比起來,MapBox更清潔,更輕便,也更容易使用,但是相對的,MapBox相對於Arcgis缺少了很多的功能實現,許多的東西都需要
Android在標準linux基礎上對休眠喚醒的實現(一)(二)(三)【轉】
說明: 1. Based on linux 2.6.32 and android 2.2,only support SDR(mem). 2. 參考文章: 一、新增特性介紹 實際上,android仍然是利用了標準linux的休眠喚醒系統,只不過添加了一些使用
Android中關於JNI 的學習(一)對於JNIEnv的一些認識
else size 初步 jint 使用 包括 pri jnienv 就會 一個簡單的樣例讓我們初步地了解JNI的作用,可是關於JNI中的一些概念還是須要了解清楚,才可以更好的去利用它來實現我們想要做的事情。 那麽C++和Java之間的是怎樣通過JNI來進行互相調用的呢
【原創】源碼角度分析Android的消息機制系列(一)——Android消息機制概述
run 權限 開發 等待 通過 讀取 概述 走了 color ι 版權聲明:本文為博主原創文章,未經博主允許不得轉載。 1.為什麽需要Android的消息機制 因為Android系統不允許在子線程中去訪問UI,即Android系統不允許在子線程中更新UI。 為什麽不允許
異步線程池的實現(一)-------具體實現方法
fun format 測試 路徑 線程池。 用戶體驗 deb tar clas 本篇是這個內容的第一篇,主要是寫:遇到的問題,和自己摸索實現的方法。後面還會有一篇是總結性地寫線程池的相關內容(偏理論的)。 一、背景介紹 朋友的項目開發到一定程度之後,又遇到
多種排序算法的思路和簡單代碼的實現(一)
insert i++ 前後端 分享 size quicksort 執行 判斷 clas 就自己簡單的理解了一些排序算法(JAVA)思路和代碼分享給大家:歡迎大家進行交流。 直接插入排序,折半插入排序,冒泡排序,快速排序 1 public class Sort { 2
Dji Mobile SDK 基礎實現(一)
n-1 app lba ger print ttl touch事件 釋放 bsp Dji Mobile SDK 基礎實現(一) 本文簡要介紹如何通過調用DJI Mobile SDK,實現獲取和釋放無人機的控制權限、模擬遙控器按鈕控制無人機的飛行、獲取無人機的回傳視頻、獲取無
尋找bug並消滅系列——記錄在Android開發所遇到的bug(一)
ont 屬性 XML android oid content 事件監聽器 監聽 設置 之前使用了Android Studio的插件直接為button綁定了監聽器,並實現onClick方法(我的onClick方法無論點擊哪一個都是要實現setcontentview這個方法設置
實現自定義查詢的數據庫設計及實現(一)
bre 名稱 審批流程 work 數據庫名 需要 自定義查詢 perm 枚舉 需求 先說一下需求:實現用戶自定義的查詢,用戶可以自定義要查詢的列、自定義條件條件、自定義排序。除了查詢使用外,還可以使用於各個需要根據條件進行約束的業務,如權限; 本設計和實現,很大部分是通過數