上篇說到將每個列表自定義成一個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);
}
}
下篇我們分析該應用數據庫的實現