Android仿百度壁紙客戶端之搭建主框架(一)
這是個(gè)不錯(cuò)的教程,自己學(xué)完了之后就拿出來(lái)分享了,本來(lái)想一個(gè)帖子寫完,但是發(fā)現(xiàn)這樣對(duì)自己寫博客的效率有點(diǎn)出入,為了讓大家看的舒服點(diǎn),所以分開(kāi)來(lái)寫,我們先開(kāi)看下百度壁紙的客戶端是什么樣子的
我們先來(lái)寫個(gè)主頁(yè)的框架,我們新建一個(gè)項(xiàng)目——BaiDuWallPaper
寫個(gè)Item
layout_tab_item
<?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"> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerInParent="true"> <ImageView android:id="@+id/tabImg" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" /> <TextView android:id="@+id/tabText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/tabImg" android:layout_centerHorizontal="true" android:text="@string/app_name" android:textColor="@android:color/white" android:textSize="16sp" /> </RelativeLayout> </RelativeLayout>
然后我們?cè)賹憘€(gè)布局
<?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="70dp" android:orientation="horizontal"> <include android:id="@+id/homeLayout" layout="@layout/layout_tab_item" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" /> <include android:id="@+id/selectLayout" layout="@layout/layout_tab_item" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" /> <include android:id="@+id/searchLayout" layout="@layout/layout_tab_item" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" /> <include android:id="@+id/locationLayout" layout="@layout/layout_tab_item" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" /> <include android:id="@+id/settingLayout" layout="@layout/layout_tab_item" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" /> </LinearLayout>
這樣我們就可以自定義組合控件了
MyBottomLayout
package com.lgl.baiduwallpaper.view; import android.content.Context; import android.graphics.Color; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; import com.lgl.baiduwallpaper.R; /** * 底部布局 * Created by lgl on 16/3/31. */ public class MyBottomLayout extends LinearLayout { //跟布局是RelativeLayout private RelativeLayout homeLayout, selectLayout, searchLayout, locationLayout, settingLayout; //布局加載 private LayoutInflater inflater; //構(gòu)造方法 public MyBottomLayout(Context context, AttributeSet attrs) { super(context, attrs); initView(); } /** * 初始化 */ private void initView() { inflater = LayoutInflater.from(getContext()); View view = inflater.inflate(R.layout.layout_bottom, this); findView(view); initData(); setonClick(); } /** * 初始化數(shù)據(jù) */ private void initData() { homeLayout.findViewById(R.id.tabImg).setBackgroundResource(R.mipmap.image_tabbar_button_home_down); TextView tvHome = (TextView) homeLayout.findViewById(R.id.tabText); tvHome.setText("首頁(yè)"); tvHome.setTextColor(Color.BLUE); selectLayout.findViewById(R.id.tabImg).setBackgroundResource(R.mipmap.image_tabbar_button_search); TextView tvSelect = (TextView) selectLayout.findViewById(R.id.tabText); tvSelect.setText("精選"); tvSelect.setTextColor(Color.WHITE); searchLayout.findViewById(R.id.tabImg).setBackgroundResource(R.mipmap.image_tabbar_button_find); TextView tvSearch = (TextView) searchLayout.findViewById(R.id.tabText); tvSearch.setText("搜索"); tvSearch.setTextColor(Color.WHITE); locationLayout.findViewById(R.id.tabImg).setBackgroundResource(R.mipmap.image_tabbar_button_manage); TextView tvLoaction = (TextView) locationLayout.findViewById(R.id.tabText); tvLoaction.setText("本地"); tvLoaction.setTextColor(Color.WHITE); settingLayout.findViewById(R.id.tabImg).setBackgroundResource(R.mipmap.image_tabbar_button_more); TextView tvSetting = (TextView) settingLayout.findViewById(R.id.tabText); tvSetting.setText("設(shè)置"); tvSetting.setTextColor(Color.WHITE); } /** * 找到控件的方法 * * @param view */ private void findView(View view) { homeLayout = (RelativeLayout) view.findViewById(R.id.homeLayout); selectLayout = (RelativeLayout) view.findViewById(R.id.selectLayout); searchLayout = (RelativeLayout) view.findViewById(R.id.searchLayout); locationLayout = (RelativeLayout) view.findViewById(R.id.locationLayout); settingLayout = (RelativeLayout) view.findViewById(R.id.settingLayout); } /** * 控件的點(diǎn)擊事件 */ private void setonClick() { homeLayout.setOnClickListener(new lister()); selectLayout.setOnClickListener(new lister()); searchLayout.setOnClickListener(new lister()); locationLayout.setOnClickListener(new lister()); settingLayout.setOnClickListener(new lister()); } /** * 點(diǎn)擊接口 */ private class lister implements OnClickListener { /** * 點(diǎn)擊后改變點(diǎn)擊狀態(tài) * 切換頁(yè)面 * * @param v */ @Override public void onClick(View v) { switch (v.getId()) { case R.id.homeLayout: initPix(0); break; case R.id.selectLayout: initPix(1); break; case R.id.searchLayout: initPix(2); break; case R.id.locationLayout: initPix(3); break; case R.id.settingLayout: initPix(4); break; } iCallbackListener.clic(v.getId()); } } /** * 切換卡的位置 */ public void initPix(int i) { switch (i) { case 0: homeLayout.findViewById(R.id.tabImg).setBackgroundResource(R.mipmap.image_tabbar_button_home_down); TextView tvHome0 = (TextView) homeLayout.findViewById(R.id.tabText); tvHome0.setTextColor(Color.BLUE); selectLayout.findViewById(R.id.tabImg).setBackgroundResource(R.mipmap.image_tabbar_button_search); TextView tvSelect0 = (TextView) selectLayout.findViewById(R.id.tabText); tvSelect0.setTextColor(Color.WHITE); searchLayout.findViewById(R.id.tabImg).setBackgroundResource(R.mipmap.image_tabbar_button_find); TextView tvSearch0 = (TextView) searchLayout.findViewById(R.id.tabText); tvSearch0.setTextColor(Color.WHITE); locationLayout.findViewById(R.id.tabImg).setBackgroundResource(R.mipmap.image_tabbar_button_manage); TextView tvLocation0 = (TextView) locationLayout.findViewById(R.id.tabText); tvLocation0.setTextColor(Color.WHITE); settingLayout.findViewById(R.id.tabImg).setBackgroundResource(R.mipmap.image_tabbar_button_more); TextView tvSetting0 = (TextView) settingLayout.findViewById(R.id.tabText); tvSetting0.setTextColor(Color.WHITE); break; case 1: homeLayout.findViewById(R.id.tabImg).setBackgroundResource(R.mipmap.image_tabbar_button_home); TextView tvHome1 = (TextView) homeLayout.findViewById(R.id.tabText); tvHome1.setTextColor(Color.WHITE); selectLayout.findViewById(R.id.tabImg).setBackgroundResource(R.mipmap.image_tabbar_button_search_down); TextView tvSelect1 = (TextView) selectLayout.findViewById(R.id.tabText); tvSelect1.setTextColor(Color.BLUE); searchLayout.findViewById(R.id.tabImg).setBackgroundResource(R.mipmap.image_tabbar_button_find); TextView tvSearch1 = (TextView) searchLayout.findViewById(R.id.tabText); tvSearch1.setTextColor(Color.WHITE); locationLayout.findViewById(R.id.tabImg).setBackgroundResource(R.mipmap.image_tabbar_button_manage); TextView tvLocation1 = (TextView) locationLayout.findViewById(R.id.tabText); tvLocation1.setTextColor(Color.WHITE); settingLayout.findViewById(R.id.tabImg).setBackgroundResource(R.mipmap.image_tabbar_button_more); TextView tvSetting1 = (TextView) settingLayout.findViewById(R.id.tabText); tvSetting1.setTextColor(Color.WHITE); break; case 2: homeLayout.findViewById(R.id.tabImg).setBackgroundResource(R.mipmap.image_tabbar_button_home); TextView tvHome2 = (TextView) homeLayout.findViewById(R.id.tabText); tvHome2.setTextColor(Color.WHITE); selectLayout.findViewById(R.id.tabImg).setBackgroundResource(R.mipmap.image_tabbar_button_search); TextView tvSelect2 = (TextView) selectLayout.findViewById(R.id.tabText); tvSelect2.setTextColor(Color.WHITE); searchLayout.findViewById(R.id.tabImg).setBackgroundResource(R.mipmap.image_tabbar_button_find_down); TextView tvSearch2 = (TextView) searchLayout.findViewById(R.id.tabText); tvSearch2.setTextColor(Color.BLUE); locationLayout.findViewById(R.id.tabImg).setBackgroundResource(R.mipmap.image_tabbar_button_manage); TextView tvLocation2 = (TextView) locationLayout.findViewById(R.id.tabText); tvLocation2.setTextColor(Color.WHITE); settingLayout.findViewById(R.id.tabImg).setBackgroundResource(R.mipmap.image_tabbar_button_more); TextView tvSetting2 = (TextView) settingLayout.findViewById(R.id.tabText); tvSetting2.setTextColor(Color.WHITE); break; case 3: homeLayout.findViewById(R.id.tabImg).setBackgroundResource(R.mipmap.image_tabbar_button_home); TextView tvHome3 = (TextView) homeLayout.findViewById(R.id.tabText); tvHome3.setTextColor(Color.WHITE); selectLayout.findViewById(R.id.tabImg).setBackgroundResource(R.mipmap.image_tabbar_button_search); TextView tvSelect3 = (TextView) selectLayout.findViewById(R.id.tabText); tvSelect3.setTextColor(Color.WHITE); searchLayout.findViewById(R.id.tabImg).setBackgroundResource(R.mipmap.image_tabbar_button_find); TextView tvSearch3 = (TextView) searchLayout.findViewById(R.id.tabText); tvSearch3.setTextColor(Color.WHITE); locationLayout.findViewById(R.id.tabImg).setBackgroundResource(R.mipmap.image_tabbar_button_manage_down); TextView tvLocation3 = (TextView) locationLayout.findViewById(R.id.tabText); tvLocation3.setTextColor(Color.BLUE); settingLayout.findViewById(R.id.tabImg).setBackgroundResource(R.mipmap.image_tabbar_button_more); TextView tvSetting3 = (TextView) settingLayout.findViewById(R.id.tabText); tvSetting3.setTextColor(Color.WHITE); break; case 4: homeLayout.findViewById(R.id.tabImg).setBackgroundResource(R.mipmap.image_tabbar_button_home); TextView tvHome4 = (TextView) homeLayout.findViewById(R.id.tabText); tvHome4.setTextColor(Color.WHITE); selectLayout.findViewById(R.id.tabImg).setBackgroundResource(R.mipmap.image_tabbar_button_search); TextView tvSelect4 = (TextView) selectLayout.findViewById(R.id.tabText); tvSelect4.setTextColor(Color.WHITE); searchLayout.findViewById(R.id.tabImg).setBackgroundResource(R.mipmap.image_tabbar_button_find); TextView tvSearch4 = (TextView) searchLayout.findViewById(R.id.tabText); tvSearch4.setTextColor(Color.WHITE); locationLayout.findViewById(R.id.tabImg).setBackgroundResource(R.mipmap.image_tabbar_button_manage); TextView tvLocation4 = (TextView) locationLayout.findViewById(R.id.tabText); tvLocation4.setTextColor(Color.WHITE); settingLayout.findViewById(R.id.tabImg).setBackgroundResource(R.mipmap.image_tabbar_button_more_down); TextView tvSetting4 = (TextView) settingLayout.findViewById(R.id.tabText); tvSetting4.setTextColor(Color.BLUE); break; } } }
我們運(yùn)行一下
接下來(lái)我們讓他可以切換選項(xiàng)卡,我們定義一個(gè)接口
/** * 切換頁(yè)面的接口 */ public interface ICallbackListener { public void clic(int id); } ICallbackListener iCallbackListener = null; public void setonCallbackListener(ICallbackListener iCallbackListener) { this.iCallbackListener = iCallbackListener; }
接著初始化數(shù)據(jù)
/** * 設(shè)置默認(rèn)的第一頁(yè)數(shù)據(jù) */ private void initPagerContent(android.app.Fragment fragment) { FragmentManager manager = getFragmentManager(); android.app.FragmentTransaction ft = manager.beginTransaction(); ft.replace(R.id.myContent,fragment); ft.commit(); }
然后我們引用的時(shí)候就可以直接new了
/** * 切換接口 */ private class MyCallbackListener implements MyBottomLayout.ICallbackListener { @Override public void clic(int id) { switch (id) { case R.id.homeLayout: initPagerContent(new HomeFragment()); break; case R.id.selectLayout: initPagerContent(new SelectFragment()); break; case R.id.searchLayout: initPagerContent(new SearchFragment()); break; case R.id.locationLayout: initPagerContent(new LoactionFragment()); break; case R.id.settingLayout: initPagerContent(new SettingFragment()); break; } } }
我們?cè)谶\(yùn)行一下
但是有一點(diǎn)我們要知道,我們還要實(shí)現(xiàn)滑動(dòng),這樣的話,我們就要使用viewpager了
layout_main.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"> <android.support.v4.view.ViewPager android:id="@+id/myViewPager" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_above="@+id/myBottomLayout" /> <com.lgl.baiduwallpaper.view.MyBottomLayout android:id="@+id/myBottomLayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:background="@mipmap/image_titlebar_background" /> </RelativeLayout>
具體的,我就直接把MainActivity的代碼貼上吧
package com.lgl.baiduwallpaper; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import com.lgl.baiduwallpaper.fragment.HomeFragment; import com.lgl.baiduwallpaper.fragment.LoactionFragment; import com.lgl.baiduwallpaper.fragment.SearchFragment; import com.lgl.baiduwallpaper.fragment.SelectFragment; import com.lgl.baiduwallpaper.fragment.SettingFragment; import com.lgl.baiduwallpaper.view.MyBottomLayout; /** * 主界面 */ public class MainActivity extends FragmentActivity { private MyBottomLayout myBottomLayout; private ViewPager viewpager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } /** * 初始化 */ private void initView() { // initPagerContent(new HomeFragment()); findView(); setOnclick(); } // /** // * 設(shè)置默認(rèn)的第一頁(yè)數(shù)據(jù) // */ // private void initPagerContent(android.app.Fragment fragment) { // FragmentManager manager = getFragmentManager(); // android.app.FragmentTransaction ft = manager.beginTransaction(); // ft.replace(R.id.myContent,fragment); // ft.commit(); // } /** * 點(diǎn)擊事件 */ private void setOnclick() { myBottomLayout.setonCallbackListener(new MyCallbackListener()); } /** * 找尋控件 */ private void findView() { myBottomLayout = (MyBottomLayout) findViewById(R.id.myBottomLayout); viewpager = (ViewPager) findViewById(R.id.myViewPager); viewpager.setAdapter(new MyFragmentAdapter(getSupportFragmentManager())); //頁(yè)面監(jiān)聽(tīng) viewpager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { myBottomLayout.initPix(position); } @Override public void onPageScrollStateChanged(int state) { } }); } /** * 切換接口 */ private class MyCallbackListener implements MyBottomLayout.ICallbackListener { @Override public void clic(int id) { switch (id) { case R.id.homeLayout: // initPagerContent(new HomeFragment()); viewpager.setCurrentItem(0); break; case R.id.selectLayout: // initPagerContent(new SelectFragment()); viewpager.setCurrentItem(1); break; case R.id.searchLayout: // initPagerContent(new SearchFragment()); viewpager.setCurrentItem(2); break; case R.id.locationLayout: // initPagerContent(new LoactionFragment()); viewpager.setCurrentItem(3); break; case R.id.settingLayout: // initPagerContent(new SettingFragment()); viewpager.setCurrentItem(4); break; } } } /** * viewpager的adapter */ private class MyFragmentAdapter extends FragmentPagerAdapter { public MyFragmentAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { switch (position) { case 0: return new HomeFragment(); case 1: return new SelectFragment(); case 2: return new SearchFragment(); case 3: return new LoactionFragment(); case 4: return new SettingFragment(); } return null; } @Override public int getCount() { //5個(gè)頁(yè)面 return 5; } } }
主要是你切換的時(shí)候setCurrentItem(id);同時(shí)監(jiān)聽(tīng)viewpager的滑動(dòng),就可以自由切換了,我們運(yùn)行一下
源碼下載: Android仿百度壁紙客戶端
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android自定義動(dòng)態(tài)壁紙開(kāi)發(fā)詳解
- Android使用線程更換壁紙
- Android-Service實(shí)現(xiàn)手機(jī)壁紙自動(dòng)更換
- Android HttpURLConnection下載網(wǎng)絡(luò)圖片設(shè)置系統(tǒng)壁紙
- Android編程之手機(jī)壁紙WallPaper設(shè)置方法示例
- Android編程之動(dòng)態(tài)壁紙實(shí)例分析
- Android實(shí)現(xiàn)手機(jī)壁紙改變的方法
- Android開(kāi)發(fā)學(xué)習(xí)之WallPaper設(shè)置壁紙?jiān)敿?xì)介紹與實(shí)例
- android動(dòng)態(tài)壁紙調(diào)用的簡(jiǎn)單實(shí)例
- Android動(dòng)態(tài)時(shí)鐘壁紙開(kāi)發(fā)
相關(guān)文章
Android TV 焦點(diǎn)框移動(dòng)的實(shí)現(xiàn)方法
本篇文章主要介紹了Android TV 焦點(diǎn)框移動(dòng)的實(shí)現(xiàn)方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-06-06詳解Flutter 調(diào)用 Android Native 的方法
這篇文章主要介紹了詳解Flutter 調(diào)用 Android Native 的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01Activity取消界面切換的默認(rèn)動(dòng)畫(huà)方法(推薦)
下面小編就為大家?guī)?lái)一篇Activity取消界面切換的默認(rèn)動(dòng)畫(huà)方法(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-12-12Android studio 項(xiàng)目手動(dòng)在本地磁盤中刪除module后,殘留文件夾無(wú)法刪除的問(wèn)題解決方法
這篇文章主要介紹了Android studio 項(xiàng)目手動(dòng)在本地磁盤中刪除module后,殘留文件夾無(wú)法刪除問(wèn)題,本文給出了解決方法,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03詳解Android PopupWindow怎么合理控制彈出位置(showAtLocation)
本篇文章主要介紹了詳解Android PopupWindow怎么合理控制彈出位置(showAtLocation),具有一定的參考價(jià)值,有興趣的可以了解一下2017-10-10Android開(kāi)發(fā)之文本內(nèi)容自動(dòng)朗讀功能實(shí)現(xiàn)方法
這篇文章主要介紹了Android開(kāi)發(fā)之文本內(nèi)容自動(dòng)朗讀功能實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了Android自動(dòng)朗讀TTS功能的操作步驟、相關(guān)函數(shù)使用方法與注意事項(xiàng),需要的朋友可以參考下2017-09-09