練習隨筆16.09.29

/**1,引導頁動畫*/

動畫結束時,追加切換動畫,需要在anim中新建兩個xml


			@Override
			public void onAnimationEnd(Animation animation) {
				// 當動畫結束時-跳轉
				Intent intent=new Intent(SplashActivity.this,MainActivity.class);
				startActivity(intent);
				//實現跳轉的時候切換動畫
				overridePendingTransition(R.anim.in_anim, R.anim.out_anim);
				finish();
			}


這個duration必須設置 不設置默認爲0,動畫不執行

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="1500"
    android:fromDegrees="0"
    android:toDegrees="90" >

</rotate>


/**2 主頁面 radiobutton*/


value裏做個style組件 放radiobutton

    <style 
        name="radio_style"
        >
        <item name="android:checked">false</item>
        <item name="android:layout_width">0dp</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:layout_weight">1</item>
        <item name="android:button">@null</item>
        <item name="android:paddingTop">15dp</item>
        <item name="android:gravity">center</item>
    </style>

主頁面1:


設置爲垂直,否則會發生效果出不來的BUG

    android:orientation="vertical"


做個viewpager 權重選成1 就把button組件頂到下面去了


    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager_main"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">
        </android.support.v4.view.ViewPager>


把做好的button組件引入到主頁面1

    <include 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        layout="@layout/main_button"
        />

/**3 頂端actionbar*/

單獨做一個xml

weight設置爲1 把其他兩個頂到左右兩端

textview layout_gravity設置center


封裝出來fragment成爲父類,讓其他需要定製的子頁面去繼承重寫圖片和標題文本

新建fragment包和類,BaseFragmen要繼承VA包的fragment,用於減少代碼冗餘

/**
 * 基礎的fragment父類
 * 所有fragment都要繼承自該類
 * 在類中封裝公有的標題欄初始化方法
 * 提高代碼重用性,降低冗餘
 */

package com.example.fragment;

import android.support.v4.app.Fragment;

    protected void initialActionbar(int leftId,String title,int rightId){   
        /**
         * 如果子類沒有actionbar,就不繼承下列控件了
         */
        if (actionbar==null) {
            return;
        }
        //獲得該標題欄中的所有控件
        ImageView imageview_left=
                (ImageView) actionbar.findViewById(R.id.imageView_actionbar_left);
        TextView textview_title=
                (TextView) actionbar.findViewById(R.id.textview_actionbar_title);
        ImageView imageview_right=
                (ImageView) actionbar.findViewById(R.id.imageView_actionbar_right);
        //該圖片需要隱藏,約定如下
        //View.INVISIBLE是隱藏,View.GONE是刪除,位置會騰出來
        if (leftId==-1) {
            imageview_left.setVisibility(View.INVISIBLE);
        }else{
            //顯示該圖片
            imageview_left.setVisibility(View.VISIBLE);
            imageview_left.setImageResource(leftId);
        }
        //如果標題參數爲空 則不顯示標題
        if (TextUtils.isEmpty(title)) {
            textview_title.setVisibility(View.INVISIBLE);
        }else {
            textview_title.setVisibility(View.VISIBLE);
            textview_title.setText(title);
        }
        //右邊圖片
        if (rightId==-1) {
            imageview_right.setVisibility(View.INVISIBLE);
        }else{
            //顯示該圖片
            imageview_right.setVisibility(View.VISIBLE);
            imageview_right.setImageResource(rightId);
        }
        
    }

創建四個fragment 繼承BaseFragment 重寫佈局

不需要左上右上按鈕時,填-1

R.id.include_fragment_dialpad 是xml裏includ的,不加會發生頂部banner不顯示的BUG

initialUI()千萬別忘了寫

public class CalllogFragment extends BaseFragment {
	
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
		//inflater 佈局解析器 ;false表示container並非作爲根節點,再去解析R.layout.fragment_contacts時作爲佈局參數
		contentview=inflater.inflate(R.layout.fragment_calllog, container, false);
<pre name="code" class="java">                initialUI()
  return contentview;}private void initialUI(){actionbar=(LinearLayout) contentview.findViewById(R.id.include_fragment_dialpad);initialActionbar(R.drawable.ic_add_icon, "撥打電話", R.drawable.ic_backspace);}

main中編寫適配器

    private void initialFragments() {        //初始化viewpager

        //創建數據適配器

                  //導的可能不是V4包,需要繼承fragmentActicity,才能getSupportFragmentManager()                  adapter =new MyFragmentPagerAdapter(getSupportFragmentManager());

        //創建四個fragment對象        //將四個fragment對象添加到適配器集合當中

        //將數據適配器和viewpager進行綁定

                 viewpager_main.setAdapter(adapter);                 viewpager_main.setCurrentItem(0);              //啓動時當前item顯示第幾個

    }

/**4 底端選擇器*/

res直接新建,drawable-selector

被選中 未被選中 都要寫 選中放上面 未選中放下面

state_checked 單選

state_selected 複選

    <item android:drawable="@drawable/ic_calllog_selected" 
        android:state_checked="true"></item>
    <item android:drawable="@drawable/ic_calllog" 
        android:state_checked="false"></item>

然後再xml裏把圖片地址改成選擇器,設置默認選中狀態

        <RadioButton 
            android:id="@+id/radio_calllog"
            style="@style/radio_style"
            android:checked="true"
            android:drawableTop="@drawable/calllog_selector"
            />


/**5設置兩個監聽器 滑動&點擊*/

private void setListener() {
		viewpager_main.setOnPageChangeListener(new OnPageChangeListener() {
			//當我們在viewpager選擇不同頁面時 回調該方法
			//方法被回調的時候會把頁面在集合中的索引傳回來
			@Override
			public void onPageSelected(int arg0) {
				// 判斷頁碼
				switch (arg0) {
				case 0:
					radiogroup_bottom.check(R.id.radio_calllog);//按鈕id傳給父容器
					break;
				case 1:
					radiogroup_bottom.check(R.id.radio_contact);
					break;
				case 2:
					radiogroup_bottom.check(R.id.radio_sms);
					break;
				case 3:
					radiogroup_bottom.check(R.id.radio_dialpad);
					break;

				default:
					break;
				}
			}
			@Override
			public void onPageScrolled(int arg0, float arg1, int arg2) {
				// TODO Auto-generated method stub
			}
			@Override
			public void onPageScrollStateChanged(int arg0) {
				// TODO Auto-generated method stub
			}
		});

		//爲radiogroup添加監聽
		//當選擇不同按鈕時 改變viewpager顯示的fragment
		radiogroup_bottom.setOnCheckedChangeListener(new OnCheckedChangeListener() {
			@Override
			public void onCheckedChanged(RadioGroup group, int checkedId) {
				switch (checkedId) {
				case R.id.radio_calllog:
					viewpager_main.setCurrentItem(0,false);
					break;
				case R.id.radio_contact:
					viewpager_main.setCurrentItem(1,false);
					break;
				case R.id.radio_sms:
					viewpager_main.setCurrentItem(2,false);
					break;
				case R.id.radio_dialpad:
					viewpager_main.setCurrentItem(3,false);
					break;
				default:
					break;
				}
			}
		});
	}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章