Android自界说控件之日历控件-Android-优质IT资源分享社区

admin
管理员
管理员
  • UID1
  • 粉丝27
  • 关注4
  • 发帖数581
  • 社区居民
  • 忠实会员
  • 原创写手
阅读:220回复:0

Android自界说控件之日历控件

楼主#
更多 发布于:2016-05-19 16:09


Android自界说控件之日历控件

三月份学习android,至今也有半年有余,中心也做过两个项目,可是依然感受自个做的运用不是很有新意,比不上运用市场上那些运用如此绚丽。所以自个仍需持续努力。学习至今,仍感受自界说控件是一块硬骨头,还没修炼到死后的内功,下面就切入正题,以一次项目的需求,来完结一个自界说的日历控件。作用图先来一发。



咱们剖析下作用图,然后断定咱们的需求。

(1)、制作星期的自界说View,用于标识日期的礼拜。

(2)、制作日期的自界说View。

(3)、制作业务圆圈,从作用图中咱们以红圈标识今日有业务。

(4)、制作选中日期的色彩。

(5)、对选中日期进行点击工作的处理。

经过对作用图的剖析,得出了咱们的需求,咱们在仔细剖析作用图,发现里边即是制作文字和制作线条,所以咱们只要回Canvas的这两个功用即可,首要的难点是怎么将这些日期进行方位的安排,接下来咱们就来逐一剖析怎么完结一个自界说View。


完结Week的自界说View




作用图





剖析下作用图,咱们需求制作上下两条线、然后制作描绘文字(日、一、二、三、四、五、六)。下面就讲解下咱们的完结。先看着部分的源码,然后在分隔讲解。



public class WeekDayView extends View {

     //上横线色彩

     private int mTopLineColor = Color.parseColor("#CCE4F2");

     //下横线色彩

     private int mBottomLineColor = Color.parseColor("#CCE4F2");

     //周一到周五的色彩

     private int mWeedayColor = Color.parseColor("#1FC2F3");

     //周六、周日的色彩

     private int mWeekendColor = Color.parseColor("#fa4451");

     //线的宽度

     private int mStrokeWidth = 4;

     private int mWeekSize = 14;

     private Paint paint;

     private DisplayMetrics mDisplayMetrics;

     private String[] weekString = new String[]{"日","一","二","三","四","五","六"};

     public WeekDayView(Context context, AttributeSet attrs) {

          super(context, attrs);

          mDisplayMetrics = getResources().getDisplayMetrics();

          paint = new Paint();

     }



     @Override

     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

          int widthSize = MeasureSpec.getSize(widthMeasureSpec);

          int widthMode = MeasureSpec.getMode(widthMeasureSpec);



          int heightSize = MeasureSpec.getSize(heightMeasureSpec);

          int heightMode = MeasureSpec.getMode(heightMeasureSpec);



          if(heightMode == MeasureSpec.AT_MOST){

                heightSize = mDisplayMetrics.densityDpi * 30;

          }

          if(widthMode == MeasureSpec.AT_MOST){

                widthSize = mDisplayMetrics.densityDpi * 300;

          }

          setMeasuredDimension(widthSize, heightSize);

    }



    @Override

    protected void onDraw(Canvas canvas) {

         int width = getWidth();

         int height = getHeight();

         //进行画上下线

         paint.setStyle(Style.STROKE);

         paint.setColor(mTopLineColor);

         paint.setStrokeWidth(mStrokeWidth);

         canvas.drawLine(0, 0, width, 0, paint);



         //画下横线

         paint.setColor(mBottomLineColor);

         canvas.drawLine(0, height, width, height, paint);

         paint.setStyle(Style.FILL);

         paint.setTextSize(mWeekSize * mDisplayMetrics.scaledDensity);

         int columnWidth = width / 7;

         for(int i=0;i < weekString.length;i++){

               String text = weekString;

               int fontWidth = (int) paint.measureText(text);

               int startX = columnWidth * i + (columnWidth - fontWidth)/2;

               int startY = (int) (height/2 - (paint.ascent() + paint.descent())/2);

               if(text.indexOf("日") > -1|| text.indexOf("六") > -1){

                     paint.setColor(mWeekendColor);

               }else{

                     paint.setColor(mWeedayColor);

               }

               canvas.drawText(text, startX, startY, paint);

         }

    }



    /**

      * 设置顶线的色彩

      * @param mTopLineColor

      */

    public void setmTopLineColor(int mTopLineColor) {

         this.mTopLineColor = mTopLineColor;

    }



    /**

      * 设置底线的色彩

      * @param mBottomLineColor

      */

    public void setmBottomLineColor(int mBottomLineColor) {

         this.mBottomLineColor = mBottomLineColor;

    }



    /**

      * 设置周一-五的色彩

      * @return

      */

    public void setmWeedayColor(int mWeedayColor) {

         this.mWeedayColor = mWeedayColor;

    }



    /**

      * 设置周六、周日的色彩

      * @param mWeekendColor

      */

    public void setmWeekendColor(int mWeekendColor) {

         this.mWeekendColor = mWeekendColor;

    }



    /**

      * 设置边线的宽度

      * @param mStrokeWidth

      */

    public void setmStrokeWidth(int mStrokeWidth) {

         this.mStrokeWidth = mStrokeWidth;

    }

    /**

      * 设置字体的巨细

      * @param mWeekSize

      */

    public void setmWeekSize(int mWeekSize) {

        this.mWeekSize = mWeekSize;

    }

    /**

      * 设置星期的方式

      * @param weekString

      * 默许值 "日","一","二","三","四","五","六"

      */

    public void setWeekString(String[] weekString) {

         this.weekString = weekString;

    }

}








(1)、首要咱们界说了咱们需求的成员变量,比方上下线条的色彩、宽度、字体的巨细、周期的表现方式。这些都是为了灵敏定制而需求的。方便运用。

(2)、现在来看看onMeasure办法,咱们知道在自界说view中,咱们遇到wrap_content特点,这是view的巨细也许就不是咱们想要的了,所以咱们在onMeasure办法中,指定此条件下的巨细,即默许巨细为300*30。

(3)、onDraw办法,咱们在onDraw办法中进行咱们需求内容的制作。咱们运用drawLine办法,进行上下横线的制作,然后int columnWidth = width / 7;计算每列的宽度,为何计算宽度呢?由于咱们要将”日”,”一”,”二”,”三”,”四”,”五”,”六”这七个字放在对应格子的居中方位。经过drawText办法进行制作文字,咱们需求指定制作文字的开端方位,为了达到居中的方位,咱们需求进行计算。



int startX = columnWidth * i + (columnWidth - fontWidth)/2;

int startY = (int) (height/2 - (paint.ascent() + paint.descent())/2);








此处不是很了解的,能够参照下爱哥的文章。后边即是一些设置特点,没什么讲头。

至此很简略的完结了咱们的week的自界说view。下面咱们来剖析下日期的完结。


完结日期Date的自界说View



类似WeekView的完结,咱们在DateView中的难点也是怎么放置这些日期date。先上源码,然后咱们在具体剖析:



public class MonthDateView extends View {

     private static final int NUM_COLUMNS = 7;

     private static final int NUM_ROWS = 6;

     private Paint mPaint;

     private int mDayColor = Color.parseColor("#000000");

     private int mSelectDayColor = Color.parseColor("#ffffff");

     private int mSelectBGColor = Color.parseColor("#1FC2F3");

     private int mCurrentColor = Color.parseColor("#ff0000");

     private int mCurrYear,mCurrMonth,mCurrDay;

     private int mSelYear,mSelMonth,mSelDay;

     private int mColumnSize,mRowSize;

     private DisplayMetrics mDisplayMetrics;

     private int mDaySize = 18;

     private TextView tv_date,tv_week;

     private int weekRow;

     private int [][] daysString;

     private int mCircleRadius = 6;

     private DateClick dateClick;

     private int mCircleColor = Color.parseColor("#ff0000");

     private List<Integer> daysHasThingList;

     public MonthDateView(Context context, AttributeSet attrs) {

          super(context, attrs);

          mDisplayMetrics = getResources().getDisplayMetrics();

          Calendar calendar = Calendar.getInstance();

          mPaint = new Paint();

          mCurrYear = calendar.get(Calendar.YEAR);

          mCurrMonth = calendar.get(Calendar.MONTH);

          mCurrDay = calendar.get(Calendar.DATE);

          setSelectYearMonth(mCurrYear,mCurrMonth,mCurrDay);

     }



     @Override

     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

          int widthSize = MeasureSpec.getSize(widthMeasureSpec);

          int widthMode = MeasureSpec.getMode(widthMeasureSpec);



          int heightSize = MeasureSpec.getSize(heightMeasureSpec);

          int heightMode = MeasureSpec.getMode(heightMeasureSpec);



          if(heightMode == MeasureSpec.AT_MOST){

                heightSize = mDisplayMetrics.densityDpi * 200;

          }

          if(widthMode == MeasureSpec.AT_MOST){

                widthSize = mDisplayMetrics.densityDpi * 300;

          }

          setMeasuredDimension(widthSize, heightSize);

     }



     @Override

     protected void onDraw(Canvas canvas) {

          initSize();

          daysString = new int[6][7];

          mPaint.setTextSize(mDaySize*mDisplayMetrics.scaledDensity);

          String dayString;

          int mMonthDays = DateUtils.getMonthDays(mSelYear, mSelMonth);

          int weekNumber = DateUtils.getFirstDayWeek(mSelYear, mSelMonth);

          Log.d("DateView", "DateView:" + mSelMonth+"月1号周" + weekNumber);

          for(int day = 0;day < mMonthDays;day++){

                dayString = (day + 1) + "";

                int column = (day+weekNumber - 1) % 7;

                int row = (day+weekNumber - 1) / 7;

                daysString[row][column]=day + 1;

                int startX = (int) (mColumnSize * column + (mColumnSize - mPaint.measureText(dayString))/2);

                int startY = (int) (mRowSize * row + mRowSize/2 - (mPaint.ascent() + mPaint.descent())/2);

                if(dayString.equals(mSelDay+"")){

                      //制作背景色矩形

                      int startRecX = mColumnSize * column;

                      int startRecY = mRowSize * row;

                      int endRecX = startRecX + mColumnSize;

                      int endRecY = startRecY + mRowSize;

                      mPaint.setColor(mSelectBGColor);

                      canvas.drawRect(startRecX, startRecY, endRecX, endRecY, mPaint);

                      //记载第几行,即第几周

                      weekRow = row + 1;

                }

                //制作业务圆形象征

                drawCircle(row,column,day + 1,canvas);

                if(dayString.equals(mSelDay+"")){

                      mPaint.setColor(mSelectDayColor);

                }else if(dayString.equals(mCurrDay+"") && mCurrDay != mSelDay && mCurrMonth == mSelMonth){

                      //正常月,选中别的日期,则今日为赤色

                      mPaint.setColor(mCurrentColor);

                }else{

                      mPaint.setColor(mDayColor);

                }

                canvas.drawText(dayString, startX, startY, mPaint);

                if(tv_date != null){

                      tv_date.setText(mSelYear + "年" + (mSelMonth + 1) + "月");

                }



                if(tv_week != null){

                      tv_week.setText("第" + weekRow +"周");

                }

           }

      }



      private void drawCircle(int row,int column,int day,Canvas canvas){

           if(daysHasThingList != null && daysHasThingList.size() >0){

                 if(!daysHasThingList.contains(day))return;

                        mPaint.setColor(mCircleColor);

                        float circleX = (float) (mColumnSize * column + mColumnSize*0.8);

                        float circley = (float) (mRowSize * row + mRowSize*0.2);

                        canvas.drawCircle(circleX, circley, mCircleRadius, mPaint);

                 }

           }

           @Override

           public boolean performClick() {

                 return super.performClick();

           }



           private int downX = 0,downY = 0;

           @Override

           public boolean onTouchEvent(MotionEvent event) {

                int eventCode= event.getAction();

                switch(eventCode){

                     case MotionEvent.ACTION_DOWN:

                          downX = (int) event.getX();

                          downY = (int) event.getY();

                          break;

                     case MotionEvent.ACTION_MOVE:

                          break;

                     case MotionEvent.ACTION_UP:

                          int upX = (int) event.getX();

                          int upY = (int) event.getY();

                          if(Math.abs(upX-downX) < 10 && Math.abs(upY - downY) < 10){//点击工作

                                performClick();

                                doClickAction((upX + downX)/2,(upY + downY)/2);

                          }

                           break;

                    }

                    return true;

              }



          /**

            * 初始化列宽行高

            */

          private void initSize(){

               mColumnSize = getWidth() / NUM_COLUMNS;

               mRowSize = getHeight() / NUM_ROWS;

          }



         /**

           * 设置年月

           * @param year

           * @param month

           */

         private void setSelectYearMonth(int year,int month,int day){

               mSelYear = year;

               mSelMonth = month;

               mSelDay = day;

         }

         /**

           * 履行点击工作

           * @param x

           * @param y

           */

         private void doClickAction(int x,int y){

               int row = y / mRowSize;

               int column = x / mColumnSize;

               setSelectYearMonth(mSelYear,mSelMonth,daysString[row][column]);

               invalidate();

               //履行activity发送过来的点击处理工作

               if(dateClick != null){

                     dateClick.onClickOnDate();

               }

         }



         /**

           * 左点击,日历向后翻页

           */

         public void onLeftClick(){

              int year = mSelYear;

              int month = mSelMonth;

              int day = mSelDay;

              if(month == 0){//若果是1月份,则成为12月份

                    year = mSelYear-1;

                    month = 11;

              }else if(DateUtils.getMonthDays(year, month) == day){

                    //假如当时日期为该月最终一点,当向前推的时分,就需求改动选中的日期

                    month = month-1;

                    day = DateUtils.getMonthDays(year, month);

              }else{

                    month = month-1;

              }

              setSelectYearMonth(year,month,day);

              invalidate();

        }



        /**

          * 右点击,日历向前翻页

          */

        public void onRightClick(){

             int year = mSelYear;

             int month = mSelMonth;

             int day = mSelDay;

             if(month == 11){//若果是12月份,则成为1月份

                  year = mSelYear+1;

                  month = 0;

             }else if(DateUtils.getMonthDays(year, month) == day){

                  //假如当时日期为该月最终一点,当向前推的时分,就需求改动选中的日期

                  month = month + 1;

                  day = DateUtils.getMonthDays(year, month);

             }else{

                   month = month + 1;

             }

             setSelectYearMonth(year,month,day);

             invalidate();

       }



       /**

         * 获取挑选的年份

         * @return

         */

       public int getmSelYear() {

             return mSelYear;

       }

       /**

         * 获取挑选的月份

         * @return

         */

       public int getmSelMonth() {

             return mSelMonth;

       }

       /**

         * 获取挑选的日期

         * @param mSelDay

         */

       public int getmSelDay() {

             return this.mSelDay;

       }

       /**

         * 一般日期的字体色彩,默许黑色

         * @param mDayColor

         */

       public void setmDayColor(int mDayColor) {

             this.mDayColor = mDayColor;

       }



       /**

         * 挑选日期的色彩,默许为白色

         * @param mSelectDayColor

         */

       public void setmSelectDayColor(int mSelectDayColor) {

            this.mSelectDayColor = mSelectDayColor;

       }



       /**

         * 选中日期的背景色彩,默许蓝色

         * @param mSelectBGColor

         */

       public void setmSelectBGColor(int mSelectBGColor) {

            this.mSelectBGColor = mSelectBGColor;

       }

       /**

         * 当时日期不是选中的色彩,默许赤色

         * @param mCurrentColor

         */

       public void setmCurrentColor(int mCurrentColor) {

             this.mCurrentColor = mCurrentColor;

       }



       /**

         * 日期的巨细,默许18sp

         * @param mDaySize

         */

       public void setmDaySize(int mDaySize) {

            this.mDaySize = mDaySize;

       }

       /**

         * 设置显现当时日期的控件

         * @param tv_date

         * 显现日期

         * @param tv_week

         * 显现周

         */

       public void setTextView(TextView tv_date,TextView tv_week){

            this.tv_date = tv_date;

            this.tv_week = tv_week;

            invalidate();

       }



       /**

         * 设置业务天数

         * @param daysHasThingList

         */

       public void setDaysHasThingList(List<Integer> daysHasThingList) {

            this.daysHasThingList = daysHasThingList;

       }



       /***

          * 设置圆圈的半径,默许为6

          * @param mCircleRadius

          */

       public void setmCircleRadius(int mCircleRadius) {

            this.mCircleRadius = mCircleRadius;

       }



       /**

         * 设置圆圈的半径

         * @param mCircleColor

         */

       public void setmCircleColor(int mCircleColor) {

            this.mCircleColor = mCircleColor;

       }



       /**

         * 设置日期的点击回调工作

         * @author shiwei.deng

         *

         */

       public interface DateClick{

            public void onClickOnDate();

       }



       /**

         * 设置日期点击工作

         * @param dateClick

         */

       public void setDateClick(DateClick dateClick) {

            this.dateClick = dateClick;

       }



       /**

         * 跳转至今日

         */

       public void setTodayToView(){

            setSelectYearMonth(mCurrYear,mCurrMonth,mCurrDay);

            invalidate();

       }

 }








(1)、首要咱们仍是界说了一些咱们需求的成员变量,比方,字体的色彩、圆圈的色彩、选中的背景色、相同咱们需求记载下咱们准确的年月日、以及选中的年月日来进行区别,首要就这么多。

(2)、然后进行重写onMeasure办法,类似于WeekView,不做过多解说,差不多。

(3)、在onDraw办法中进行制作,制作的原理,咱们依据Calendar获取当时月份的天数,以及第一天是礼拜几,只要计算出礼拜几,咱们才知道咱们的日历从哪列开端,这样咱们就能够计算出每次制作日期的方位:



int column = (day+weekNumber - 1) % 7;

int row = (day+weekNumber - 1) / 7;

daysString[row][column]=day + 1;

int startX = (int) (mColumnSize * column + (mColumnSize - mPaint.measureText(dayString))/2);

int startY = (int) (mRowSize * row + mRowSize/2 - (mPaint.ascent() + mPaint.descent())/2);








一个礼拜有七天,咱们依据日期号和开端计算出日期的对应队伍,然后在乘以队伍宽,就能够计算出每个日期号的本来方位。这样咱们就能够经过drawText进行日期的制作。咱们有一个成员变量记载选中的日期号,然后进行制作选中的背景色,如下代码:



if(dayString.equals(mSelDay+"")){

      //制作背景色矩形

      int startRecX = mColumnSize * column;

      int startRecY = mRowSize * row;

      int endRecX = startRecX + mColumnSize;

      int endRecY = startRecY + mRowSize;

      mPaint.setColor(mSelectBGColor);

      canvas.drawRect(startRecX, startRecY, endRecX, endRecY, mPaint);

      //记载第几行,即第几周

      weekRow = row + 1;

 }








(4)、咱们还有一个需求,即是制作业务象征,咱们界说了List daysHasThingList的list目标,这个目标咱们用来’装’业务的日期号。然后咱们在onDraw办法中判别日期是否包括在这个list中,然后制作对应的圆圈。



private void drawCircle(int row,int column,int day,Canvas canvas){

      if(daysHasThingList != null && daysHasThingList.size() >0){

            if(!daysHasThingList.contains(day))return;

                   mPaint.setColor(mCircleColor);

                   float circleX = (float) (mColumnSize * column + mColumnSize*0.8);

                   float circley = (float) (mRowSize * row + mRowSize*0.2);

                   canvas.drawCircle(circleX, circley, mCircleRadius, mPaint);

             }

      }

}






(5)、至此,日期的制作和业务都完结了,可是还没有点击工作进行切换日期的挑选,这怎么办呢?所以咱们需求重写View的onTouchEvent办法,然后判别点击工作,依据获取的X、Y值,计算出咱们挑选队伍,然后咱们在依据队伍在daysString中获取咱们选中的日期,设置选中日期,然后改写视图。



public boolean onTouchEvent(MotionEvent event) {

     int eventCode= event.getAction();

     switch(eventCode){

           case MotionEvent.ACTION_DOWN:

                downX = (int) event.getX();

                downY = (int) event.getY();

                break;

           case MotionEvent.ACTION_MOVE:

                break;

           case MotionEvent.ACTION_UP:

                int upX = (int) event.getX();

                int upY = (int) event.getY();

                if(Math.abs(upX-downX) < 10 && Math.abs(upY - downY) < 10){//点击工作

                      performClick();

                      doClickAction((upX + downX)/2,(upY + downY)/2);

                }

                break;

       }

       return true;

}








(5)、有的需求是进行点击工作的处理,这时咱们只需求写一个简略的回调,然后在activity中进行处理即可。



private void doClickAction(int x,int y){

       int row = y / mRowSize;

       int column = x / mColumnSize;

       setSelectYearMonth(mSelYear,mSelMonth,daysString[row][column]);

       invalidate();

       //履行activity发送过来的点击处理工作

       if(dateClick != null){

              dateClick.onClickOnDate();

       }

}



/**

 * 设置日期的点击回调工作

 * @author shiwei.deng

 *

 */

 public interface DateClick{

      public void onClickOnDate();

 }



/**

 * 设置日期点击工作

 * @param dateClick

 */

 public void setDateClick(DateClick dateClick) {

      this.dateClick = dateClick;

 }








(6)首要的处理现已完结,剩余的需求咱们获取日期的显现以及显现第几周、点击【今】返回到今日,这些处理的逻辑即是设置选中的日期,然后改写视图。代码就不贴了,上面的源码注释的挺具体的。

最终即是咱们运用自界说View进行显现。如:



<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

       android:layout_width="fill_parent"

       android:layout_height="fill_parent"

       android:layout_centerInParent="true"

       android:orientation="vertical" >

       <!-- 日历时刻挑选栏 -->

       <RelativeLayout

             android:layout_width="fill_parent"

             android:layout_height="wrap_content"

             android:gravity="center_vertical"

             android:background="#ffffff"

             android:layout_marginLeft="10dp"

             android:layout_marginRight="10dp"

             android:paddingTop="3dp">

             <ImageView

                    android:id="@+id/iv_left"

                    android:layout_width="wrap_content"

                    android:layout_height="wrap_content"

                    android:layout_alignParentLeft="true"

                    android:contentDescription="@null"

                    android:background="@drawable/left_arrow" />

             <ImageView

                    android:id="@+id/iv_right"

                    android:layout_width="wrap_content"

                    android:layout_height="wrap_content"

                    android:layout_alignParentRight="true"

                    android:contentDescription="@null"

                    android:background="@drawable/right_arrow" />

             <LinearLayout

                    android:id="@+id/date_operator_ll"

                    android:layout_width="fill_parent"

                    android:layout_height="wrap_content"

                    android:layout_gravity="center_vertical"

                    android:gravity="center"

                    android:layout_centerInParent="true"

                    android:orientation="horizontal" >

            <TextView

                    android:id="@+id/tv_today"

                    android:layout_width="25dp"

                    android:layout_height="25dp"

                    android:layout_marginRight="5dp"

                    android:text="今"

                    android:gravity="center"

                    android:background="#FFD700"

                    android:textColor="#ffffff"

                    android:textSize="17sp" />



            <TextView

                    android:id="@+id/date_text"

                    style="@style/myschedule_current_month_tv"

                    android:layout_width="wrap_content"

                    android:layout_height="wrap_content"

                    android:gravity="center_horizontal"

                    android:textColor="#93C73C"

                    android:textSize="20sp"

                    android:text="" />

           <TextView

                    android:id="@+id/week_text"

                    style="@style/myschedule_current_month_tv"

                    android:layout_width="wrap_content"

                    android:layout_height="wrap_content"

                    android:gravity="center_horizontal"

                    android:layout_marginLeft="10dp"

                    android:textColor="#93C73C"

                    android:textSize="20sp"

                    android:text="" />

         </LinearLayout>

 </RelativeLayout>

 <LinearLayout

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:layout_marginLeft="10dp"

        android:layout_marginRight="10dp"

        android:background="#ffffff"

        android:orientation="vertical" >



        <com.dsw.datepicker.WeekDayView

               android:layout_width="match_parent"

               android:layout_height="30dp" />

        <com.dsw.datepicker.MonthDateView

               android:id="@+id/monthDateView"

               android:layout_width="fill_parent"

               android:layout_height="200dp" />

 </LinearLayout>

 </LinearLayout>








这样咱们在activity中就能运用了:



public class MainActivity extends FragmentActivity {

      private ImageView iv_left;

      private ImageView iv_right;

      private TextView tv_date;

      private TextView tv_week;

      private TextView tv_today;

      private MonthDateView monthDateView;

      @Override

      protected void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);

            List<Integer> list = new ArrayList<Integer>();

            list.add(10);

            list.add(12);

            list.add(15);

            list.add(16);

            setContentView(R.layout.activity_date);

            iv_left = (ImageView) findViewById(R.id.iv_left);

            iv_right = (ImageView) findViewById(R.id.iv_right);

            monthDateView = (MonthDateView) findViewById(R.id.monthDateView);

            tv_date = (TextView) findViewById(R.id.date_text);

            tv_week =(TextView) findViewById(R.id.week_text);

            tv_today = (TextView) findViewById(R.id.tv_today);

            monthDateView.setTextView(tv_date,tv_week);

            monthDateView.setDaysHasThingList(list);

            monthDateView.setDateClick(new DateClick() {



                  @Override

                  public void onClickOnDate() {

                       Toast.makeText(getApplication(), "点击了:" + monthDateView.getmSelDay(), Toast.LENGTH_SHORT).show();

                 }

            });

            setOnlistener();

      }



      private void setOnlistener(){

           iv_left.setOnClickListener(new OnClickListener() {



           @Override

           public void onClick(View v) {

                 monthDateView.onLeftClick();

           }

     });



     iv_right.setOnClickListener(new OnClickListener() {



     @Override

     public void onClick(View v) {

          monthDateView.onRightClick();

     }

});



tv_today.setOnClickListener(new OnClickListener() {



@Override

public void onClick(View v) {

      monthDateView.setTodayToView();

}

});

}

}






至此,全部的内容现已完结,一个简略的自界说view的运用,在实践项目中运用颇多,当然这个比如还有许多完善的当地,比方在onTouchEvent中进行滑动的监督,经过滑动来进行日期的修正,这些有爱好的同学能够试试。



优质IT资源分享社区为你提供此文。
本站有大量优质android教程视频,资料等资源,包含android基础教程,高级进阶教程等等,教程视频资源涵盖传智播客,极客学院,达内,北大青鸟,猎豹网校等等IT职业培训机构的培训教学视频,价值巨大。欢迎点击下方链接查看。

android教程视频
优质IT资源分享社区(www.itziyuan.top)
一个免费,自由,开放,共享,平等,互助的优质IT资源分享网站。
专注免费分享各大IT培训机构最新培训教学视频,为你的IT学习助力!

!!!回帖受限制请看点击这里!!!
!!!资源失效请在此版块发帖说明!!!

[PS:按 CTRL+D收藏本站网址~]

——“优质IT资源分享社区”管理员专用签名~

本版相似帖子

游客