Android 仿iphone提醒事項(二)

上篇說到將每個列表自定義成一個view,該篇將列表放入主界面並實現動畫。

在主界面加如表一:

添加表一:

if (!isDeleteTableOne) {
            listStyleViewOne = new ListStyleView(this, Utils.addDetailsDate(getApplicationContext(), Utils.TABLE_COUNT_ONE), Utils.TABLE_COUNT_ONE);
            listStyleViewOne.initDetailHead(titleSP.getString("TITLE" + 1, getApplicationContext().getResources().getString(R.string.table1)),
                    0xAA000000, getApplicationContext().getResources().getString(R.string.table1_no_project));
            ll.addView(listStyleViewOne);
        }

其中addDetailsDate裏面把數據庫數據轉到可以讓adapter使用的ArrayList數據

 /**
     * 把數據庫數據轉到可以讓adapter使用的ArrayList數據
     */
    public static ArrayList<MessageBean> addDetailsDate(Context mContext,
                                                        int tabelCount) {
        SQLHelper.createSql(mContext);

        List<Map<String, String>> listTemp = SQLHelper.queryAllMessage(
                mContext, tabelCount);// 調用數據庫數據
        ArrayList<MessageBean> mMessageList = new ArrayList<MessageBean>();
        if (listTemp.size() > 0) {
            for (int i = 0; i < listTemp.size(); i++) {
                MessageBean item = new MessageBean();
                item.title = listTemp.get(i).get("TITLE");
                item.time = listTemp.get(i).get("TIME");
                item.location = listTemp.get(i).get("LOCATION");
                item.note = listTemp.get(i).get("NOTE");
                item.repeat = Integer.valueOf(listTemp.get(i).get("REPEAT"));
                item.isCheck = listTemp.get(i).get("ISCHECK").equals("0")?false:true;
                if(!Utils.isShow&&item.isCheck) {
                }else{
                    mMessageList.add(item);
                }
            }
        }

        return mMessageList;
    }

同理添加表二表三表四

 // 表二
        if (!isDeleteTableTwo) {
            listStyleViewTwo = new ListStyleView(this, Utils.addDetailsDate(getApplicationContext(), Utils.TABLE_COUNT_TWO), Utils.TABLE_COUNT_TWO);

            RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams( // 表二初始位置往下調150px
                    LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
            layoutParams.topMargin = Utils.MARGIN_GAP;

            ll.addView(listStyleViewTwo, layoutParams);

            listStyleViewTwo.initDetailHead(titleSP.getString("TITLE" + 2,
                    getApplicationContext().getResources().getString(R.string.reminder_pro).toString()), 0xAA7dd1f0, "");
            settingSPEditor.putString("TITLE" + 2,getApplicationContext().getResources().getString(R.string.table2).toString()).commit();
            colorSpEditor.putInt("CURRENT_TABLE" + 2, 0xFF7dd1f0);
        }
        // 表三
        if (!isDeleteTableThree) {
            listStyleViewThree = new ListStyleView(this, Utils.addDetailsDate(getApplicationContext(), Utils.TABLE_COUNT_THREE), Utils.TABLE_COUNT_THREE);
            RelativeLayout.LayoutParams layoutParamsThree = new RelativeLayout.LayoutParams( // 表二初始位置往下調150px
                    LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
            layoutParamsThree.topMargin = Utils.MARGIN_GAP * 2;
            if (titleSP.getInt("TOTAL_TABLE",2) > 2) {
                ll.addView(listStyleViewThree, layoutParamsThree);
            }
            listStyleViewThree.initDetailHead(titleSP.getString("TITLE" + 3, getApplicationContext().getResources().getString(R.string.table3).toString()), 0xAAd6e663, "");
            settingSPEditor.putString("TITLE" + 3,getApplicationContext().getResources().getString(R.string.table3).toString()).commit();
            colorSpEditor.putInt("CURRENT_TABLE" + 3, 0xFFcb72e0);
        }
        // 表四
        if (!isDeleteTableFour) {
            listStyleViewFour = new ListStyleView(this, Utils.addDetailsDate(getApplicationContext(), Utils.TABLE_COUNT_FOUR), Utils.TABLE_COUNT_FOUR);
            RelativeLayout.LayoutParams layoutParamsFour = new RelativeLayout.LayoutParams( // 表二初始位置往下調150px
                    LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
            layoutParamsFour.topMargin = Utils.MARGIN_GAP * 3;
            if (titleSP.getInt("TOTAL_TABLE",2) > 3) {
                ll.addView(listStyleViewFour, layoutParamsFour);
            }
            listStyleViewFour.initDetailHead(titleSP.getString("TITLE" + 4, getApplicationContext().getResources().getString(R.string.table4).toString()), 0xAAd6e663, "");
            settingSPEditor.putString("TITLE" + 4,getApplicationContext().getResources().getString(R.string.table4).toString()).commit();
            colorSpEditor.putInt("CURRENT_TABLE" + 4, 0xFFcb72e0);
        }
每張表要在前面表的下面,添加layoutParams.topMargin = Utils.MARGIN_GAP;可以發現這樣寫只能固定表個數,和實際功能還有差距,這個我們後面做處理添加表後給每張表做監聽,實現動畫切換,比如說點擊表一

listStyleViewOne.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
                if (listStyleViewOne.isEditStatus) {

                } else {
				switch (status) {
				case 0:
                        Log.d("chenshichun",""+this.getClass().getCanonicalName()+"::::::::::::::::::listStyleViewOne:::0");
                        translateAnimation(listStyleViewTwo.getY(), Utils.TO_Y_VALUE,
                                listStyleViewTwo, Utils.SEY_Y);
                        translateAnimation(listStyleViewThree.getY(), Utils.TO_Y_VALUE + Utils.BOTTOM_GAP,
                                listStyleViewThree, Utils.SEY_Y + Utils.BOTTOM_GAP);
                        translateAnimation(listStyleViewFour.getY(), Utils.TO_Y_VALUE + Utils.BOTTOM_GAP * 2,
                                listStyleViewFour, Utils.SEY_Y + Utils.BOTTOM_GAP * 2);
                        mHeaderLl.setVisibility(View.GONE);
                        shelterView.setVisibility(View.GONE);
					status = 2;
					break;
                        case 1:// 表二在最上面
                        if (!ListStyleView.isEditStatus) {
                            Log.d("chenshichun",""+this.getClass().getCanonicalName()+"::::::::::::::::::listStyleViewOne:::1");
                           /* translateAnimation(listStyleViewOne.getY(), -Utils.SEY_Y,
                                    listStyleViewOne, 0);
                            translateAnimation(listStyleViewTwo.getY(), Utils.MARGIN_GAP,
                                    listStyleViewTwo, Utils.MARGIN_GAP);

                            translateAnimation(listStyleViewOne.getY(), -Utils.SEY_Y + Utils.MARGIN_GAP * 2,
                                    listStyleViewOne, Utils.MARGIN_GAP * 2);

                            mHeaderLl.setVisibility(View.VISIBLE);
//                                shelterView.setVisibility(View.VISIBLE);
					status = 0;*/
                            }
					break;
                        case 2:// 表一在最上面
                        if (!ListStyleView.isEditStatus) {
                            Log.d("chenshichun",""+this.getClass().getCanonicalName()+"::::::::::::::::::listStyleViewOne:::2");
                            translateAnimation(listStyleViewTwo.getY(), -Utils.TO_Y_VALUE,
                                    listStyleViewTwo, Utils.MARGIN_GAP);

                            translateAnimation(listStyleViewThree.getY(), -(Utils.TO_Y_VALUE + Utils.BOTTOM_GAP),
                                    listStyleViewThree, Utils.MARGIN_GAP * 2);

                            translateAnimation(listStyleViewFour.getY(), -(Utils.TO_Y_VALUE + Utils.BOTTOM_GAP * 2),
                                    listStyleViewFour, Utils.MARGIN_GAP * 3);
                            mHeaderLl.setVisibility(View.VISIBLE);
//                                shelterView.setVisibility(View.VISIBLE);
					status = 0;
                            }
					break;
				default:
					break;
				}

				listStyleViewOne.isEditShow(status == 2 ? true : false);
			}
            }
		});
這是開始的思路,做完這步我們思考怎麼實現動態添加表,表個數不限,對數據做一個分析

第一張表風格和其他表不一樣單獨寫,於是我們把加表改成:

 ListStyleView mListStyleView = new ListStyleView(getApplicationContext(), Utils.addDetailsDate(getApplicationContext(), mListStyleViewList.size()), mListStyleViewList.size());
        mListStyleView.initDetailHead("HEAD", 0xAA7dd1f0, "test");
        mListStyleViewList.add(mListStyleView);



        if(tableCountSp.getInt(Utils.TABLE_COUNT_KEY,1)>1){
            for(int i=1;i<tableCountSp.getInt(Utils.TABLE_COUNT_KEY,1);i++){
                ListStyleView mOtherListStyleView = new ListStyleView(getApplicationContext(), Utils.addDetailsDate(getApplicationContext(), mListStyleViewList.size() + 1), mListStyleViewList.size() + 1);
                mListStyleViewList.add(mOtherListStyleView);
            }
        }
監聽事件改爲:

mListStyleViewList.get(i).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {

                    Toast.makeText(getApplicationContext(), "第" + view.getId() + "項", Toast.LENGTH_LONG).show();
                    if(!isOneHead) {

                        headerLl.setVisibility(View.GONE);
                        mListStyleViewList.get(view.getId()).isEditShow(true);

                        for (int i = 0; i < mListStyleViewList.size(); i++) {

                            if(i!=view.getId()) {

                                translateAnimation(mListStyleViewList.get(i), 1200 - Utils.MARGIN_GAP * i, 1200);

                            }else{

                                translateAnimation(mListStyleViewList.get(view.getId()), -Utils.MARGIN_GAP * view.getId(), 0);

                            }

                        }
                    }else{

                        headerLl.setVisibility(View.VISIBLE);
                        mListStyleViewList.get(view.getId()).isEditShow(false);
                        for (int i = 0; i < mListStyleViewList.size(); i++) {

                            if(i!=view.getId()) {

                                translateAnimation(mListStyleViewList.get(i), -(1200 - Utils.MARGIN_GAP * i), i*Utils.MARGIN_GAP);

                            }else{

                                translateAnimation(mListStyleViewList.get(view.getId()), Utils.MARGIN_GAP * view.getId(), Utils.MARGIN_GAP * view.getId());

                            }
                        }
                    }
到這裏就實現了將表動態放在主界面且可以動畫

主界面Activity:

package com.iphone.reminder.activity;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.ScrollView;
import android.widget.Toast;

import com.iphone.reminder.R;
import com.iphone.reminder.listview.ListViewCompat;
import com.iphone.reminder.util.Utils;
import com.iphone.reminder.view.ListStyleView;

import java.util.ArrayList;

/**
 * Created by csc on 17-4-19.
 */

public class TestActivity extends Activity implements View.OnClickListener {
    private LinearLayout headerLl;
    private EditText keywordsSearchEt;
    private ImageView addIv;
    private Button cancelBtn;
    private ScrollView scorllView;
    private RelativeLayout viewObj;
    private View shelterView;
    private RelativeLayout searchResultsRe;
    private ListViewCompat searchResultsListview;
    private RelativeLayout ll;
    public static TestActivity mTestActivity;
    private ArrayList<ListStyleView> mListStyleViewList = new ArrayList<ListStyleView>();
    private boolean isOneHead = false;
    private SharedPreferences tableCountSp , titleSp , colorSp;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_test);
        mTestActivity = this;
        headerLl = (LinearLayout) findViewById(R.id.header_ll);
        keywordsSearchEt = (EditText) findViewById(R.id.keywords_search_et);
        addIv = (ImageView) findViewById(R.id.add_iv);
        addIv.setOnClickListener(this);
        cancelBtn = (Button) findViewById(R.id.cancel_btn);
        scorllView = (ScrollView) findViewById(R.id.scorll_view);
        viewObj = (RelativeLayout) findViewById(R.id.viewObj);
        shelterView = (View) findViewById(R.id.shelter_view);
        searchResultsRe = (RelativeLayout) findViewById(R.id.search_results_re);
        searchResultsListview = (ListViewCompat) findViewById(R.id.search_results_listview);
        ll = (RelativeLayout) findViewById(R.id.viewObj);

        tableCountSp = getSharedPreferences(Utils.TABLE_COUNT, 0);
        titleSp = getSharedPreferences(Utils.TABLE_TITLE, 0);
        colorSp = getSharedPreferences(Utils.TABLE_COLOR, 1);

        ListStyleView mListStyleView = new ListStyleView(getApplicationContext(), Utils.addDetailsDate(getApplicationContext(), mListStyleViewList.size()), mListStyleViewList.size());
        mListStyleView.initDetailHead("HEAD", 0xAA7dd1f0, "test");
        mListStyleViewList.add(mListStyleView);



        if(tableCountSp.getInt(Utils.TABLE_COUNT_KEY,1)>1){
            for(int i=1;i<tableCountSp.getInt(Utils.TABLE_COUNT_KEY,1);i++){
                ListStyleView mOtherListStyleView = new ListStyleView(getApplicationContext(), Utils.addDetailsDate(getApplicationContext(), mListStyleViewList.size() + 1), mListStyleViewList.size() + 1);
                mListStyleViewList.add(mOtherListStyleView);
            }
        }

        showListStyleViews();
    }

    @Override
    public void onClick(View view) {

        switch (view.getId()) {
            case R.id.add_iv:

                ListStyleView mListStyleView = new ListStyleView(getApplicationContext(), Utils.addDetailsDate(getApplicationContext(), mListStyleViewList.size() + 1), mListStyleViewList.size() + 1);
                mListStyleViewList.add(mListStyleView);

                SharedPreferences.Editor tableCountSPEditor = tableCountSp.edit();
                tableCountSPEditor.putInt(Utils.TABLE_COUNT_KEY,mListStyleViewList.size());
                tableCountSPEditor.commit();

                showListStyleViews();

                break;
        }
    }

    private void showListStyleViews() {
        SharedPreferences.Editor titleSPEditor = titleSp.edit();
        SharedPreferences.Editor colorSpEditor = colorSp.edit();

        ll.removeAllViews();
        ll.removeAllViewsInLayout();

        for (int i = 0; i < mListStyleViewList.size(); i++) {
            RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams( // 表二初始位置往下調150px
                    ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
            if (i == 0) {
                mListStyleViewList.get(i).initDetailHead(getResources().getString(R.string.table1), 0xAA7dd1f0, getResources().getString(R.string.table1_no_project));
            } else {
                mListStyleViewList.get(i).initDetailHead(titleSp.getString(Utils.TABLE_TITLE_KEY+i+1,"TABLE"+i), colorSp.getInt(Utils.TABLE_COLOR_KEY,0xAAd6e663), "");
            }

            layoutParams.topMargin = Utils.MARGIN_GAP * (i);
            mListStyleViewList.get(i).setId(i);
            ll.addView(mListStyleViewList.get(i), layoutParams);
            mListStyleViewList.get(i).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {

                    Toast.makeText(getApplicationContext(), "第" + view.getId() + "項", Toast.LENGTH_LONG).show();
                    if(!isOneHead) {

                        headerLl.setVisibility(View.GONE);
                        mListStyleViewList.get(view.getId()).isEditShow(true);

                        for (int i = 0; i < mListStyleViewList.size(); i++) {

                            if(i!=view.getId()) {

                                translateAnimation(mListStyleViewList.get(i), 1200 - Utils.MARGIN_GAP * i, 1200);

                            }else{

                                translateAnimation(mListStyleViewList.get(view.getId()), -Utils.MARGIN_GAP * view.getId(), 0);

                            }

                        }
                    }else{

                        headerLl.setVisibility(View.VISIBLE);
                        mListStyleViewList.get(view.getId()).isEditShow(false);
                        for (int i = 0; i < mListStyleViewList.size(); i++) {

                            if(i!=view.getId()) {

                                translateAnimation(mListStyleViewList.get(i), -(1200 - Utils.MARGIN_GAP * i), i*Utils.MARGIN_GAP);

                            }else{

                                translateAnimation(mListStyleViewList.get(view.getId()), Utils.MARGIN_GAP * view.getId(), Utils.MARGIN_GAP * view.getId());

                            }
                        }
                    }
                    isOneHead = !isOneHead;
                }
            });
        }
    }

    /*
    *
    * toYValue:移動距離
    * setY:最終的位置
    *
    * */

     private void translateAnimation(final ListStyleView listStyleView,
                                    final float toYValue, final int setY) {
        final TranslateAnimation animation = new TranslateAnimation(0, 0, 0,
                toYValue);
        animation.setDuration(200);// 設置動畫持續時間
        animation.setFillAfter(true);
        animation.setAnimationListener(new Animation.AnimationListener() {

            @Override
            public void onAnimationStart(Animation arg0) {

            }

            @Override
            public void onAnimationRepeat(Animation arg0) {

            }

            @SuppressLint("NewApi")
            @Override
            public void onAnimationEnd(Animation arg0) {
                listStyleView.clearAnimation();
                listStyleView.setY(setY);
            }
        });
        listStyleView.startAnimation(animation);

    }
}

下篇我們分析該應用數據庫的實現









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