国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > Android > 正文

基于Android week view仿小米和iphone日歷效果

2019-10-22 18:22:36
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

前言

最近由于項(xiàng)目需求,要做一個(gè)仿小米日歷的功能,下面顯示一天的日程,header以周為單位進(jìn)行滑動(dòng),github上找了很久也沒(méi)有找到合適的,但找到一相近的開(kāi)源項(xiàng)目Android-week-view,它不是我們項(xiàng)目所需要的效果,但是它幫我們實(shí)現(xiàn)的Event的添加和事件的處理,這讓我們省了不少工作,Android-week-view效果如下圖

Android,week,view,小米,iphone,日歷

廢話(huà)不多說(shuō),先看看我項(xiàng)目中的效果

Android,week,view,小米,iphone,日歷

Android,week,view,小米,iphone,日歷

       主要包括兩個(gè)核心的類(lèi),兩個(gè)定義控件,上面的WeekHeaderView和下面的WeekDayView,都是繼承的view,然后計(jì)算位置,將上面的week label 和下面的Day text 畫(huà)上去,通過(guò)Scroller和 GestureDetector控制滑動(dòng)和處理各種事件。廢話(huà)不多說(shuō),直接教大家怎么用。

      首先是布局文件,大家可以通過(guò)屬性去控件文字的大小,背影顏色、焦點(diǎn)顏色等等。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"   xmlns:app="http://schemas.android.com/apk/res-auto"   xmlns:tools="http://schemas.android.com/tools"   android:layout_width="match_parent"   android:layout_height="match_parent"   tools:context=".MainActivity">    <TextView     android:id="@+id/tv_date"     android:layout_width="match_parent"     android:layout_height="30dp"     android:background="#455964"     android:gravity="center"     android:text="2015年1月"     android:textColor="#ffffff"     android:textSize="16sp"/>    <com.guojunustb.library.WeekHeaderView     android:id="@+id/weekheaderview"     android:layout_width="match_parent"     android:layout_height="wrap_content"     android:layout_below="@+id/tv_date"     app:firstDayOfWeek2="sunday"     app:headerBackgroundColor="#455964"     app:headerDayLabelNormalTextColor="#ffffff"     app:headerDayLabelTextSize="20sp"     app:headerDayLabelTodayTextColor="@android:color/holo_red_dark"     app:headerFocusBackgroundColor="#ffffff"     app:headerFocusSameDayBackgroundColor="#ffffff"     app:headerFocusSameDayTextColor="#000000"     app:headerFocusTextColor="#000000"     app:headerPaddingTop="20dp"     app:headerRowGap="40dp"     app:headerWeekLabelTextColor="#ffffff"     app:headerWeekLabelTextSize="16sp" />    <com.guojunustb.library.WeekDayView     android:id="@+id/weekdayview"     android:layout_width="match_parent"     android:layout_height="match_parent"     android:layout_below="@+id/weekheaderview"     android:visibility="visible"     app:columnGap="8dp"     app:dayBackgroundColor="#ffffffff"     app:eventTextColor="@android:color/white"     app:headerColumnBackground="#ffffffff"     app:headerColumnPadding="8dp"     app:headerColumnTextColor="@color/toolbar_text"     app:headerRowBackgroundColor="#465a65"     app:headerRowPadding="12dp"     app:hourHeight="60dp"     app:noOfVisibleDays="1"     app:textSize="12sp"     app:todayBackgroundColor="#1848adff"     app:todayHeaderTextColor="@color/accent" /> </RelativeLayout> 

java代碼

package com.guojunutb.weekview;  import android.app.Activity; import android.graphics.RectF; import android.os.Bundle; import android.widget.TextView; import android.widget.Toast;  import com.guojunustb.library.DateTimeInterpreter; import com.guojunustb.library.WeekDayView; import com.guojunustb.library.WeekHeaderView; import com.guojunustb.library.WeekViewEvent;  import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.List; import java.util.Locale;  /**  *  */ public class MainActivity extends Activity implements WeekDayView.MonthChangeListener,     WeekDayView.EventClickListener, WeekDayView.EventLongPressListener,WeekDayView.EmptyViewClickListener,WeekDayView.EmptyViewLongPressListener,WeekDayView.ScrollListener {   //view   private WeekDayView mWeekView;   private WeekHeaderView mWeekHeaderView;   private TextView mTv_date;    List<WeekViewEvent> mNewEvent = new ArrayList<WeekViewEvent>();   @Override   protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.activity_main);     assignViews();   }    private void assignViews() {     mWeekView = (WeekDayView) findViewById(R.id.weekdayview);     mWeekHeaderView= (WeekHeaderView) findViewById(R.id.weekheaderview);     mTv_date =(TextView)findViewById(R.id.tv_date);     //init WeekView     mWeekView.setMonthChangeListener(this);     mWeekView.setEventLongPressListener(this);     mWeekView.setOnEventClickListener(this);     mWeekView.setScrollListener(this);     mWeekHeaderView.setDateSelectedChangeListener(new WeekHeaderView.DateSelectedChangeListener() {       @Override       public void onDateSelectedChange(Calendar oldSelectedDay, Calendar newSelectedDay) {         mWeekView.goToDate(newSelectedDay);       }     });     mWeekHeaderView.setScrollListener(new WeekHeaderView.ScrollListener() {       @Override       public void onFirstVisibleDayChanged(Calendar newFirstVisibleDay, Calendar oldFirstVisibleDay) {         mWeekView.goToDate(mWeekHeaderView.getSelectedDay());       }     });     setupDateTimeInterpreter(false);    }     /**    * Set up a date time interpreter which will show short date values when in week view and long    * date values otherwise.    *    * @param shortDate True if the date values should be short.    */   private void setupDateTimeInterpreter(final boolean shortDate) {     final String[] weekLabels={"日","一","二","三","四","五","六"};     mWeekView.setDateTimeInterpreter(new DateTimeInterpreter() {       @Override       public String interpretDate(Calendar date) {         SimpleDateFormat weekdayNameFormat = new SimpleDateFormat("EEE", Locale.getDefault());         String weekday = weekdayNameFormat.format(date.getTime());         SimpleDateFormat format = new SimpleDateFormat("d", Locale.getDefault());         return format.format(date.getTime());       }        @Override       public String interpretTime(int hour) {         return String.format("%02d:00", hour);        }        @Override       public String interpretWeek(int date) {         if(date>7||date<1){           return null;         }         return weekLabels[date-1];       }     });   }    @Override   public List<WeekViewEvent> onMonthChange(int newYear, int newMonth) {      // Populate the week view with some events.     List<WeekViewEvent> events = new ArrayList<WeekViewEvent>();      Calendar startTime = Calendar.getInstance();     startTime.set(Calendar.HOUR_OF_DAY, 3);     startTime.set(Calendar.MINUTE, 0);     startTime.set(Calendar.MONTH, newMonth - 1);     startTime.set(Calendar.YEAR, newYear);     Calendar endTime = (Calendar) startTime.clone();     endTime.add(Calendar.HOUR, 1);     endTime.set(Calendar.MONTH, newMonth - 1);     WeekViewEvent event = new WeekViewEvent(1, "This is a Event!!", startTime, endTime);     event.setColor(getResources().getColor(R.color.event_color_01));     events.add(event);      startTime = Calendar.getInstance();     startTime.set(Calendar.HOUR_OF_DAY, 3);     startTime.set(Calendar.MINUTE, 30);     startTime.set(Calendar.MONTH, newMonth - 1);     startTime.set(Calendar.YEAR, newYear);     endTime = (Calendar) startTime.clone();     endTime.set(Calendar.HOUR_OF_DAY, 4);     endTime.set(Calendar.MINUTE, 30);     endTime.set(Calendar.MONTH, newMonth - 1);     event = new WeekViewEvent(10, getEventTitle(startTime), startTime, endTime);     event.setColor(getResources().getColor(R.color.event_color_02));     events.add(event);      startTime = Calendar.getInstance();     startTime.set(Calendar.HOUR_OF_DAY, 4);     startTime.set(Calendar.MINUTE, 20);     startTime.set(Calendar.MONTH, newMonth - 1);     startTime.set(Calendar.YEAR, newYear);     endTime = (Calendar) startTime.clone();     endTime.set(Calendar.HOUR_OF_DAY, 5);     endTime.set(Calendar.MINUTE, 0);     event = new WeekViewEvent(10, getEventTitle(startTime), startTime, endTime);     event.setColor(getResources().getColor(R.color.event_color_03));     events.add(event);      startTime = Calendar.getInstance();     startTime.set(Calendar.HOUR_OF_DAY, 5);     startTime.set(Calendar.MINUTE, 30);     startTime.set(Calendar.MONTH, newMonth - 1);     startTime.set(Calendar.YEAR, newYear);     endTime = (Calendar) startTime.clone();     endTime.add(Calendar.HOUR_OF_DAY, 2);     endTime.set(Calendar.MONTH, newMonth - 1);     event = new WeekViewEvent(2, getEventTitle(startTime), startTime, endTime);     event.setColor(getResources().getColor(R.color.event_color_02));     events.add(event);     startTime = Calendar.getInstance();     startTime.set(Calendar.HOUR_OF_DAY, 5);     startTime.set(Calendar.MINUTE, 30);     startTime.set(Calendar.MONTH, newMonth - 1);     startTime.set(Calendar.YEAR, newYear);     endTime = (Calendar) startTime.clone();     endTime.add(Calendar.HOUR_OF_DAY, 2);     endTime.set(Calendar.MONTH, newMonth - 1);     event = new WeekViewEvent(2, "dddd", startTime, endTime);     event.setColor(getResources().getColor(R.color.event_color_01));     events.add(event);     startTime = Calendar.getInstance();     startTime.set(Calendar.HOUR_OF_DAY, 5);     startTime.set(Calendar.MINUTE, 0);     startTime.set(Calendar.MONTH, newMonth - 1);     startTime.set(Calendar.YEAR, newYear);     startTime.add(Calendar.DATE, 1);     endTime = (Calendar) startTime.clone();     endTime.add(Calendar.HOUR_OF_DAY, 3);     endTime.set(Calendar.MONTH, newMonth - 1);     event = new WeekViewEvent(3, getEventTitle(startTime), startTime, endTime);     event.setColor(getResources().getColor(R.color.event_color_03));     events.add(event);      startTime = Calendar.getInstance();     startTime.set(Calendar.DAY_OF_MONTH, 15);     startTime.set(Calendar.HOUR_OF_DAY, 3);     startTime.set(Calendar.MINUTE, 0);     startTime.set(Calendar.MONTH, newMonth - 1);     startTime.set(Calendar.YEAR, newYear);     endTime = (Calendar) startTime.clone();     endTime.add(Calendar.HOUR_OF_DAY, 3);     event = new WeekViewEvent(4, getEventTitle(startTime), startTime, endTime);     event.setColor(getResources().getColor(R.color.event_color_04));     events.add(event);      startTime = Calendar.getInstance();     startTime.set(Calendar.DAY_OF_MONTH, 1);     startTime.set(Calendar.HOUR_OF_DAY, 3);     startTime.set(Calendar.MINUTE, 0);     startTime.set(Calendar.MONTH, newMonth - 1);     startTime.set(Calendar.YEAR, newYear);     endTime = (Calendar) startTime.clone();     endTime.add(Calendar.HOUR_OF_DAY, 3);     event = new WeekViewEvent(5, getEventTitle(startTime), startTime, endTime);     event.setColor(getResources().getColor(R.color.event_color_01));     events.add(event);      startTime = Calendar.getInstance();     startTime.set(Calendar.DAY_OF_MONTH, startTime.getActualMaximum(Calendar.DAY_OF_MONTH));     startTime.set(Calendar.HOUR_OF_DAY, 15);     startTime.set(Calendar.MINUTE, 0);     startTime.set(Calendar.MONTH, newMonth - 1);     startTime.set(Calendar.YEAR, newYear);     endTime = (Calendar) startTime.clone();     endTime.add(Calendar.HOUR_OF_DAY, 3);     event = new WeekViewEvent(5, getEventTitle(startTime), startTime, endTime);     event.setColor(getResources().getColor(R.color.event_color_02));     events.add(event);     events.addAll(mNewEvent);     return events;   }    private String getEventTitle(Calendar time) {     return String.format("Event of %02d:%02d %s/%d", time.get(Calendar.HOUR_OF_DAY), time.get(Calendar.MINUTE), time.get(Calendar.MONTH) + 1, time.get(Calendar.DAY_OF_MONTH));   }    @Override   public void onEventClick(WeekViewEvent event, RectF eventRect) {     Toast.makeText(MainActivity.this, "Clicked " + event.getName(), Toast.LENGTH_SHORT).show();   }    @Override   public void onEventLongPress(WeekViewEvent event, RectF eventRect) {     Toast.makeText(MainActivity.this, "Long pressed event: " + event.getName(), Toast.LENGTH_SHORT).show();   }     @Override   public void onEmptyViewClicked(Calendar time) {     Toast.makeText(MainActivity.this, "Empty View clicked " + time.get(Calendar.YEAR) + "/" + time.get(Calendar.MONTH) + "/" + time.get(Calendar.DAY_OF_MONTH), Toast.LENGTH_LONG).show();   }    @Override   public void onEmptyViewLongPress(Calendar time) {     Toast.makeText(MainActivity.this, "Empty View long clicked " + time.get(Calendar.YEAR) + "/" + time.get(Calendar.MONTH) + "/" + time.get(Calendar.DAY_OF_MONTH), Toast.LENGTH_LONG).show();    }    @Override   public void onFirstVisibleDayChanged(Calendar newFirstVisibleDay, Calendar oldFirstVisibleDay) {    }    @Override   public void onSelectedDaeChange(Calendar selectedDate) {     mWeekHeaderView.setSelectedDay(selectedDate);     mTv_date.setText(selectedDate.get(Calendar.YEAR)+"年"+(selectedDate.get(Calendar.MONTH)+1)+"月");   } } 

WeekHeaderView 和WeekDayView相互監(jiān)聽(tīng)對(duì)方的滑動(dòng)才能實(shí)現(xiàn)聯(lián)動(dòng)。第一次寫(xiě)博客,就說(shuō)這么多了,有興趣的朋友可以去github,下載源碼看看,我就不再獻(xiàn)丑了。

下載地址:Sample-android-week-view

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到Android開(kāi)發(fā)頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 云龙县| 收藏| 腾冲县| 巴林左旗| 阳原县| 庄浪县| 皋兰县| 攀枝花市| 西吉县| 新乡县| 元江| 扎赉特旗| 仪征市| 公安县| 德化县| 上高县| 太仓市| 靖宇县| 施秉县| 会昌县| 泾阳县| 突泉县| 青海省| 达州市| 阜平县| 长汀县| 忻城县| 水富县| 田阳县| 华坪县| 仁化县| 黎平县| 凤凰县| 黑水县| 阳高县| 深水埗区| 镇江市| 重庆市| 繁昌县| 东源县| 景德镇市|