实例介绍
【实例简介】安卓日历,可直接运行,可添加日程,可调整日历,附带安卓时钟功能
【实例截图】


【实例截图】



【核心代码】
package com.example.administrator.scheduleplanning; import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.support.annotation.Nullable; import android.support.design.widget.CoordinatorLayout; import android.support.design.widget.FloatingActionButton; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.WindowManager; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; import com.example.administrator.scheduleplanning.adapter.CalendarViewAdapter; import com.example.administrator.scheduleplanning.adapter.DataAdapter; import com.example.administrator.scheduleplanning.adapter.MyRecyclerViewAdapter; import com.example.administrator.scheduleplanning.adapter.ViewAdapter; import com.example.administrator.scheduleplanning.composition.CalAttrComp; import com.example.administrator.scheduleplanning.dao.MyDatabaseHelper; import com.example.administrator.scheduleplanning.spinterface.DateInterface; import com.example.administrator.scheduleplanning.state.CalendarState; import com.example.administrator.scheduleplanning.view.CalendarView; import com.example.administrator.scheduleplanning.view.CustomDayView; import com.example.administrator.scheduleplanning.view.MonthView; import com.example.administrator.scheduleplanning.view.ThemeDayView; import java.util.ArrayList; import java.util.HashMap; import java.util.List; public class MainActivity extends AppCompatActivity { TextView tvYear; TextView tvMonth; TextView backToday; CoordinatorLayout content; MonthView monthPager; RecyclerView rvToDoList; FloatingActionButton btn_add,btn_jumptoclock; TextView scrollSwitch; //TextView themeSwitch; TextView nextMonthBtn; TextView lastMonthBtn; //Button btn_jump_clock; private ArrayList<CalendarView> currentCalendars = new ArrayList<>(); //private List<DataAdapter> schemeList = new ArrayList<>(); private CalendarViewAdapter calendarAdapter; private DateInterface onSelectDateListener; private int mCurrentPage = MonthView.CURRENT_DAY_INDEX; private Context context; private CalendarState currentDate; private MyDatabaseHelper dbHelper; private String keyName; private boolean initiated = false; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); context = this; content = (CoordinatorLayout) findViewById(R.id.content); monthPager = (MonthView) findViewById(R.id.calendar_view); //setViewHeight日历牌的高度 monthPager.setViewHeight(Assist.dpi2px(context, 270)); tvYear = (TextView) findViewById(R.id.show_year_view); tvMonth = (TextView) findViewById(R.id.show_month_view); backToday = (TextView) findViewById(R.id.back_today_button); scrollSwitch = (TextView) findViewById(R.id.scroll_switch); //themeSwitch = (TextView) findViewById(R.id.theme_switch); nextMonthBtn = (TextView) findViewById(R.id.next_month); lastMonthBtn = (TextView) findViewById(R.id.last_month); rvToDoList = (RecyclerView) findViewById(R.id.list); rvToDoList.setHasFixedSize(true); //线性显示 类似listview rvToDoList.setLayoutManager(new LinearLayoutManager(this)); rvToDoList.setAdapter(new ViewAdapter(this)); initCurrentDate(); initCalendarView(); initToolbarClickListener(); //clock跳转 // btn_jump_clock = (Button)findViewById(R.id.btn_jump_clock); // btn_jump_clock.setOnClickListener(new View.OnClickListener() { // @Override // public void onClick(View v) { // Intent intent = new Intent(); // intent.setClass(MainActivity.this,ClockMainActivity.class); // startActivity(intent); // } // }); //floatingactionbutton的使用 btn_add = (FloatingActionButton)findViewById(R.id.btn_add); addClickListener(); //clock跳转 btn_jumptoclock = (FloatingActionButton)findViewById(R.id.btn_jumptoclock); jumpToClockListener(); //实现全屏 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); //RecyclerView的item点击效果实现 initView(); initData(); rvRecycleView.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false)); //控制布局为LinearLayout或者是GridView或者是瀑布流布局 //adapter = new MyRecyclerViewAdapter(list,this); //rvRecycleView.setAdapter(adapter); // 设置item及item中控件的点击事件 adapter.setOnItemClickListener(MyItemClickListener); } /** * onWindowFocusChanged回调时,将当前月的种子日期修改为今天 * * @return void */ @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); if (hasFocus && !initiated) { refreshMonthPager(); initiated = true; } } /* * 如果你想以周模式启动你的日历,请在onResume是调用 * Utils.scrollTo(content, rvToDoList, monthPager.getCellHeight(), 200); * calendarAdapter.switchToWeek(monthPager.getRowIndex()); * */ @Override protected void onResume() { super.onResume(); } /** * 初始化对应功能的listener * * @return void */ private void initToolbarClickListener() { backToday.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { onClickBackToDayBtn(); } }); scrollSwitch.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (calendarAdapter.getCalendarType() == CalAttrComp.CalendarType.WEEK) { Assist.scrollTo(content, rvToDoList, monthPager.getViewHeight(), 200); calendarAdapter.switchToMonth(); } else { Assist.scrollTo(content, rvToDoList, monthPager.getCellHeight(), 200); calendarAdapter.switchToWeek(monthPager.getRowIndex()); } } }); // themeSwitch.setOnClickListener(new View.OnClickListener() { // @Override // public void onClick(View view) { // refreshSelectBackground(); // } // }); nextMonthBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { monthPager.setCurrentItem(monthPager.getCurrentPosition() 1); } }); lastMonthBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { monthPager.setCurrentItem(monthPager.getCurrentPosition() - 1); } }); } /** * 初始化currentDate * * @return void */ private void initCurrentDate() { currentDate = new CalendarState(); tvYear.setText(currentDate.getYear() "年"); tvMonth.setText(currentDate.getMonth() ""); } /** * 初始化CustomDayView,并作为CalendarViewAdapter的参数传入 */ private void initCalendarView() { initListener(); CustomDayView customDayView = new CustomDayView(context, R.layout.custom_day); calendarAdapter = new CalendarViewAdapter( context, onSelectDateListener, CalAttrComp.WeekArrayType.Monday, customDayView); calendarAdapter.setOnCalendarTypeChangedListener(new CalendarViewAdapter.OnCalendarTypeChanged() { @Override public void onCalendarTypeChanged(CalAttrComp.CalendarType type) { rvToDoList.scrollToPosition(0); } }); initMarkData(); initMonthPager(); } /** * 初始化标记数据,HashMap的形式,可自定义 * 如果存在异步的话,在使用setMarkData之后调用 calendarAdapter.notifyDataChanged(); */ private void initMarkData() { HashMap<String, String> markData = new HashMap<>(); markData.put("2017-8-9", "1"); markData.put("2017-7-9", "0"); markData.put("2017-6-9", "1"); markData.put("2017-6-10", "0"); calendarAdapter.setMarkData(markData); } private void initListener() { onSelectDateListener = new DateInterface() { @Override public void onSelectDate(CalendarState date) { refreshClickDate(date); } @Override public void onSelectOtherMonth(int offset) { //偏移量 -1表示刷新成上一个月数据 , 1表示刷新成下一个月数据 monthPager.selectOtherMonth(offset); } }; } private void refreshClickDate(CalendarState date) { currentDate = date; tvYear.setText(date.getYear() "年"); tvMonth.setText(date.getMonth() ""); //try // try_yearget.setText(String.valueOf(date.getYear())); // tv_try_monthget.setText(String.valueOf(date.getDay())); messageOfClickDate(date); } /** * 初始化monthPager,MonthPager继承自ViewPager * * @return void */ private void initMonthPager() { monthPager.setAdapter(calendarAdapter); monthPager.setCurrentItem(MonthView.CURRENT_DAY_INDEX); monthPager.setPageTransformer(false, new ViewPager.PageTransformer() { @Override public void transformPage(View page, float position) { position = (float) Math.sqrt(1 - Math.abs(position)); page.setAlpha(position); } }); monthPager.addOnPageChangeListener(new MonthView.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { mCurrentPage = position; currentCalendars = calendarAdapter.getPagers(); if (currentCalendars.get(position % currentCalendars.size()) != null) { CalendarState date = currentCalendars.get(position % currentCalendars.size()).getSeedDate(); currentDate = date; tvYear.setText(date.getYear() "年"); tvMonth.setText(date.getMonth() ""); } } @Override public void onPageScrollStateChanged(int state) { } }); } public void onClickBackToDayBtn() { refreshMonthPager(); } private void refreshMonthPager() { CalendarState today = new CalendarState(); calendarAdapter.notifyDataChanged(today); tvYear.setText(today.getYear() "年"); tvMonth.setText(today.getMonth() ""); } private void refreshSelectBackground() { ThemeDayView themeDayView = new ThemeDayView(context, R.layout.custom_day_focus); calendarAdapter.setCustomDayRenderer(themeDayView); calendarAdapter.notifyDataSetChanged(); calendarAdapter.notifyDataChanged(new CalendarState()); } //RecyclerView部分 private RecyclerView rvRecycleView; private MyRecyclerViewAdapter adapter; private ArrayList<DataAdapter> list; private void initView() { rvRecycleView = (RecyclerView)findViewById(R.id.list); } private void initData() { list = new ArrayList<>(); //list.add(new DataAdapter("schemename","啦啦啦啦啦啦啦啦啦啦")); //可以用的数据库 String name,message; dbHelper = new MyDatabaseHelper(MainActivity.this,"SchemeListCreate.db",null,1){}; SQLiteDatabase db = dbHelper.getWritableDatabase(); Cursor cursor; cursor = db.query("SchemeList",null,null,null,null,null,null); if(cursor.moveToFirst()) { do{ name = cursor.getString(cursor.getColumnIndex("schemename")); message = cursor.getString(cursor.getColumnIndex("message")); DataAdapter myDataadapter = new DataAdapter(name,message); list.add(myDataadapter); }while (cursor.moveToNext()); } adapter = new MyRecyclerViewAdapter(list,this); rvRecycleView.setAdapter(adapter); } private MyRecyclerViewAdapter.OnItemClickListener MyItemClickListener = new MyRecyclerViewAdapter.OnItemClickListener() { @Override public void onItemClick(View v, int position) { // switch (v.getId()){ // default: // //Toast.makeText(MainActivity.this,"你点击了item按钮" (position 1),Toast.LENGTH_SHORT).show(); // Intent intent = new Intent(); // intent.setClass(MainActivity.this,SchemeShowActivity.class); // startActivity(intent); // break; // } Bundle bundle = new Bundle(); keyName = list.get(position).getUsername(); // bundle.putCharSequence("name",keyName); bundle.putString("name",keyName); Intent intent = new Intent(); intent.setClass(MainActivity.this,SchemeShowActivity.class); intent.putExtras(bundle); startActivityForResult(intent,1); //startActivity(intent); } @Override public void onItemLongClick(View v) { } }; private void addClickListener() { //添加按钮的动作 btn_add.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(); intent.setClass(MainActivity.this,SchemeEditActivity.class); startActivity(intent); } }); } private void jumpToClockListener() { btn_jumptoclock.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(); intent.setClass(MainActivity.this,ClockMainActivity.class); startActivity(intent); } }); } //点击日期并回调,从数据库调用对应时间的数据 private void messageOfClickDate(CalendarState date) { list = new ArrayList<>(); String syear,smonth,sday; syear = String.valueOf(date.getYear()); smonth = String.valueOf(date.getMonth()); sday = String.valueOf(date.getDay()); String name,message; dbHelper = new MyDatabaseHelper(MainActivity.this,"SchemeListCreate.db",null,1){}; SQLiteDatabase db = dbHelper.getWritableDatabase(); Cursor cursor; cursor = db.query("SchemeList",null,"startyear = ? and startmonth = ? and startday = ?",new String[]{syear,smonth,sday},null,null,null); if(cursor.moveToFirst()) { do { name = cursor.getString(cursor.getColumnIndex("schemename")); message = cursor.getString(cursor.getColumnIndex("message")); DataAdapter myDataadapter = new DataAdapter(name,message); list.add(myDataadapter); }while(cursor.moveToNext()); } adapter = new MyRecyclerViewAdapter(list,this); rvRecycleView.setAdapter(adapter); } }
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论