旅游項目實戰開發

来源:https://www.cnblogs.com/dashucoding/archive/2018/07/07/9276863.html
-Advertisement-
Play Games

版權聲明:未經博主允許不得轉載 一:簡介 【達叔有道】軟體技術人員,時代作者,從 Android 到全棧之路,我相信你也可以!閱讀他的文章,會上癮!You and me, we are family ! 二:項目說明 項目還好,難度不大,接下來說明一下如何製作廣告顯示已經一些UI佈局等。 三:項目代 ...


版權聲明:未經博主允許不得轉載

封面圖

一:簡介

【達叔有道】軟體技術人員,時代作者,從 Android 到全棧之路,我相信你也可以!閱讀他的文章,會上癮!You and me, we are family !

二:項目說明

項目還好,難度不大,接下來說明一下如何製作廣告顯示已經一些UI佈局等。

三:項目代碼說明

一般地,點擊一款APP,會有一個頁面圖展示效果,幾秒後跳轉到主界面。

SplashActivity.java

public class SplashActivity extends AppCompatActivity{
    protected Handler mHandler=new Handler();//首先創建Handler對象
    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash);
       //對象.postDelayed實現該方法
       mHandler.postDelayed(new Runnable() {
           @Override
           public void run() {
               //設置時間並跳轉
               startActivity(new Intent(SplashActivity.this,MainActivity.class));
           }
       },2000);
    }
}

創建主界面等,創建Fragment佈局,如同微信下方點擊效果。分別創建fragment.xml佈局,fragment.java等。

public class MainFragment extends Fragment {
   //創建完,繼承Fragment,extends Fragment
   //導入import android.support.v4.app.Fragment;
   //點擊ctrl+o,導入方法,不用自己寫onCreateView
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        //返回自己渲染的佈局
        return inflater.inflate(R.layout.fragment_main,container,false);
    }
}

然後再主方法中添加動態生成Fragment,MainActivity.java中添加Fragment。

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
}
//添加點擊效果
protected MainFragment mMainFragment=new MainFragment();//首頁
//創建對象
this.getSupportFragmentManager()
                .beginTransaction()
                .add(R.id.container_content,mMainFragment)
                .add(R.id.container_content,mMainoneFragmenr)//添加
                .hide(mMainoneFragmenr)//隱藏
                .add(R.id.container_content,mMaintwoFragment)//添加
                .hide(mMaintwoFragment)//隱藏
                //事物添加  
                //預設顯示首頁  其他頁面隱藏
                //提交
                .commit();
//獲取管理類

這樣就可以顯示了,模仿微信我的界面佈局,用點擊我的按鈕,載入fragment佈局。滾動列表展示功能等。

<ScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                android:gravity="center">
                <ImageView
                    android:layout_width="48dp"
                    android:layout_height="48dp"
                    android:src="@drawable/list_my_menu"
                    android:layout_marginLeft="10dp"/>

                <RelativeLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:gravity="center"
                    android:layout_marginLeft="10dp">
                    <TextView
                        android:id="@+id/txt_my_menu"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="我的服務"
                        android:textSize="24sp"
                        android:textColor="#000000"
                        android:paddingTop="18dp"/>
                    <View
                        android:layout_width="match_parent"
                        android:layout_height="1dp"
                        android:background="#D8DDE1"
                        android:layout_below="@+id/txt_my_menu"
                        android:layout_marginTop="10dp"
                        android:layout_marginRight="10dp"></View>
                </RelativeLayout>

            </LinearLayout>

                <RelativeLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="10dp">
                    <TextView
                        android:id="@+id/txt_setting"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="我的設置"
                        android:textSize="24sp"
                        android:textColor="#000000"
                        android:paddingTop="18dp"/>
                </RelativeLayout>
            </LinearLayout>
        </LinearLayout>

    </ScrollView>

我的界面fragment.java

@Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_me,container,false);
    }

添加廣告
在佈局文件中添加ViewPager

 <android.support.v4.view.ViewPager
        android:id="@+id/vpager_main_header_ad"
        android:layout_width="match_parent"
        android:layout_height="120dp">

    </android.support.v4.view.ViewPager>

MainFragment.java

protected ViewPager mVPagerHeaderAd;//廣告頭
//onActivityCreated
mVPagerHeaderAd= (ViewPager) getView().findViewById(R.id.vpager_main_header_ad);
//添加適配器
MainHeaderAdAdapter adapter=new MainHeaderAdAdapter(getActivity(), DataUtil.getHeaderAddInfo(getActivity(),icons));
        
mVPagerHeaderAd.setAdapter(adapter);
//創建一個適配器文件
public class MainHeaderAdAdapter extends PagerAdapter{
}
//繼承extends PagerAdapter
//再寫兩個方法
@Override
    public Object instantiateItem(ViewGroup container, int position) {
        container.addView(images.get(position));
        return images.get(position);
    }
  @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView(images.get(position));
    }

    protected Context context;
    protected List<ImageView> images;

    public MainHeaderAdAdapter(Context context, List<ImageView> images){
        this.context=context;
        this.images=images;
    }

//添加數據圖片DataUtil
public static List<ImageView> getHeaderAddInfo(Context context, int icons[]){
        List<ImageView>  datas=new ArrayList<>();
        for (int i = 0; i <icons.length ; i++) {
            ImageView  icon=new ImageView(context);
            icon.setScaleType(ImageView.ScaleType.CENTER_CROP);
            icon.setImageResource(icons[i]);
            datas.add(icon);
        }
        return datas;
    }

排布

protected RecyclerView mRecycleViewMenu;//主菜單
mRecycleViewMenu= (RecyclerView) getView().findViewById(R.id.recycleview_main_menu);

 mRecycleViewMenu.setLayoutManager(new GridLayoutManager(getActivity(),4));
 MainMenuAdapter mainMenuAdapter=new MainMenuAdapter(getActivity(),DataUtil.getMainMenus(menuIons,menus));
 mRecycleViewMenu.setAdapter(mainMenuAdapter);

//
protected  String [] menus;
menus=this.getActivity().getResources().getStringArray(R.array.main_menu);

//adpater
extends RecyclerView.Adapter<MainMenuAdapter.MainMenuViewholder>
//onBindViewHolder

// ViewHolder
    class MainMenuViewholder extends RecyclerView.ViewHolder{

        public ImageView mImgMenuIcon;
        public TextView mTextMenuName;
        public MainMenuViewholder(@NonNull View itemView) {
            super(itemView);
            mImgMenuIcon=itemView.findViewById(R.id.img_menu_icon);
            mTextMenuName=itemView.findViewById(R.id.txt_menu_name);
        }
    }

//
    public int icon;
    public String menuName;

    public Menu(int icon,String menuName){
        this.icon=icon;
        this.menuName=menuName;
    }

build.gradler

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'com.android.support:appcompat-v7:26.1.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    compile 'com.android.support:recyclerview-v7:26.1.0'
}
//compile 'com.android.support:recyclerview-v7:26.1.0'
//implementation 'com.android.support:appcompat-v7:26.1.0'

總結

統一控制項版本,# TravelDemo

編輯 :達叔

定位:分享 Android&Java 知識點


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 大數據時代,你在乾什麼?大家都知道數據本身並沒有什麼價值,由於分析方法的存在,使得海量的數據變得如同一座永遠開采不完的礦,是金礦還是銀礦,得看你怎麼分析和怎麼利用了,和小編一起來瞭解一下怎麼學習大數據吧。 大數據時代,你在乾什麼?大家都知道數據本身並沒有什麼價值,由於分析方法的存在,使得海量的數據變 ...
  • 設備環境:Electra、iOS11.13.1 PS:Electra最新版本進行越獄只支持11.14以下的版本、同時這是不完美越獄,每次重啟手機都需要重新越獄,最後,由於Electra版本推出倉促,一次成功率較低。僅建議喜歡瞎折騰的童鞋嘗試。 越獄結果截圖 越獄過程 進入 "Electra" 官網下 ...
  • 1、 電量測試Android4.1版本之後在系統增加了battery info模塊,記錄一定時間周期內整機及單個App的電量消耗。2.1 註冊廣播ACTION_BATTERY_CHANGED 然後就可以獲取電池電量、充電狀態、電池狀態等信息。具體參考BatteryManager。缺點:①獲取到的是手 ...
  • 一. 網路監控 1 Network MonitorAndroid Studio自帶的Network Monitor簡單直觀,可以看出時間段之內的網路請求數量及訪問速率; 2 Charles、Fiddler等抓包工具使用Charles、Fiddler等抓包工具同樣可以實現Network Monitor ...
  • OCR
    "谷歌OCR光學字元識別窺探 簡書" "Tesseract OCR初探" "利用Tesseract圖片文字識別初探 _ TonyDeng's Blog" "Tesseract OCR(光學字元識別)教程 CocoaChina_讓移動開發更簡單" ...
  • 1.Bitmap在Android虛擬機中的記憶體分配 1 在Android3.0之前,Bitmap的記憶體分配分為兩部分,一部分是分配在Dalvik的VM堆中。而像素數據的記憶體是分配在Native堆中,而到了Android3.0之後。Bitmap的記憶體則已經所有分配在VM堆上。這兩種分配方式的差別在於, ...
  • 我們為什麼要選用Ionic(Hybrid)呢? 不必說那些花里胡哨的話,我曾經是搞Native Android開發的,兩者的區別還是有體會的 比如:我要做一個手機qq好友列表類似得佈局,只是佈局,少說要用幾百行 如果使用Ionic呢?只需要我懂得HTML,CSS,JS,那麼,最多一百行搞定, 這裡至 ...
  • 1.AndroidSDK路徑查看 (1)AndroidStudio: 菜單欄AndroidStudio Preferences Appearences&Behavior System Settins Android SDK tab中的SDK Location。 (2)Eclipse: 菜單欄Ecli ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...