1. 程式人生 > >Android 端天氣預報APP的實現(一)天氣顯示介面之上下滑動

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 枚舉 需求 先說一下需求:實現用戶自定義的查詢,用戶可以自定義要查詢的列、自定義條件條件、自定義排序。除了查詢使用外,還可以使用於各個需要根據條件進行約束的業務,如權限; 本設計和實現,很大部分是通過數