左右滑动TextView改变日期

package com.example.textviewslide;

import android.os.Bundle;
import android.app.Activity;
import android.view.GestureDetector;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.TextView;
import android.widget.ViewFlipper;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import static android.view.GestureDetector.SimpleOnGestureListener;

//需要继承OnTouchListener
public class MainActivity extends Activity implements View.OnTouchListener {

    /**
     *处理手势的实例变量
     */
    GestureDetector mGestrue = null;

    /**
     * 手指滑动时,X轴最小的滑动距离
     */
    private static final int SWIPE_MIN_DISTANCE = 120;
    /**
     * 手指滑动时,Y轴的最小距离
     */
    private static final int SWIPE_MAX_OFF_PATH = 250;
    /**
     * 手指滑动时,最小的滑动速度
     */
    private static final int SWIPE_THRESHOLD_VELOCITY = 200;

    //动画
    private Animation slideLeftIn;
    private Animation slideLeftOut;
    private Animation slideRightIn;
    private Animation slideRightOut;


    ViewFlipper viewFlipper;

    TextView TextView_Today;
    TextView TextView_Nextday;
    TextView TextView_Prevday;


    /**
     * 定义日历
     */
    Calendar calendar ;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        viewFlipper = (ViewFlipper)findViewById(R.id.viewFlipper);

        //初始化当前日期
        calendar = Calendar.getInstance();

        //加载当前日期分页
        CreateDay();

        //添加Animation实现不同动画效果
        slideLeftIn = AnimationUtils.loadAnimation(this, R.anim.slide_left_in);
        slideLeftOut = AnimationUtils.loadAnimation(this, R.anim.slide_left_out);
        slideRightIn = AnimationUtils.loadAnimation(this, R.anim.slide_right_in);
        slideRightOut = AnimationUtils.loadAnimation(this,R.anim.slide_right_out);

        slideLeftIn.setAnimationListener(animationListener);
        slideLeftOut.setAnimationListener(animationListener);
        slideRightIn.setAnimationListener(animationListener);
        slideRightOut.setAnimationListener(animationListener);

        //创建处理手势的实例
        mGestrue = new GestureDetector(this, new GestureListenter());

    }


    /**
     * 获取手势状态
     * @param view
     * @param motionEvent
     * @return
     */
    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {
        return mGestrue.onTouchEvent(motionEvent);
    }

    /**
     * 创建一个动画监听事件
     */
    Animation.AnimationListener animationListener = new Animation.AnimationListener() {
        //动画开始调用
        @Override
        public void onAnimationStart(Animation animation) {

        }
        //动画完成调用
        @Override
        public void onAnimationEnd(Animation animation) {
        //动画完成,创建新的日期显示
            CreateDay();
        }

        //动画重复调用
        @Override
        public void onAnimationRepeat(Animation animation) {

        }
    };

    /**
     * 内部类,继承SimpleOnGestureListener实现手势控制
     */
    class GestureListenter extends SimpleOnGestureListener{
        @Override
        //e1为向量的起点,e2为向量的终点。velocityX为X轴的移动速度,velocityY为Y轴的移动速度。
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
            try{
                if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
                {
                    return false;
                }
                //从右向左滑动,下一天
                if (e1.getX() -e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY)
                {
                    viewFlipper.setInAnimation(slideLeftIn);
                    viewFlipper.setOutAnimation(slideLeftOut);
                    viewFlipper.showNext();
                    //日期修改改为下一天
                    nextDay();
                    return true;
                }else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY){
                    //从左向右滑动,前一天
                    System.out.println("从右向左:" + String.valueOf(e2.getX() -e1.getX()));
                    viewFlipper.setInAnimation(slideRightIn);
                    viewFlipper.setOutAnimation(slideRightOut);
                    viewFlipper.showPrevious();
                    //日期修改为上一天
                    previousDay();
                    return true;
                }
            }catch(Exception e) {

            }
            return false;
        }
    }


    /**
     * 当前日期增加一天
     */
    private void nextDay()
    {
        calendar.add(Calendar.DAY_OF_MONTH , 1);
    }

    /**
     * 当前日期减去一天
     */
    private void previousDay()
    {
        calendar.add(Calendar.DAY_OF_MONTH , -1);
    }


    /**
     * 将日期类型转换为2013-03-10
     * @param currentTime
     * @return
     */
    public  String getStringDateShort(Date currentTime) {

        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        String dateString = formatter.format(currentTime);
        return dateString;
    }


    /**
     *  创建日期显示
     */
    public void CreateDay()
    {
        //创建三个日历对象
        Calendar tempCalendar1 = Calendar.getInstance();
        Calendar tempCalendar2 = Calendar.getInstance();
        Calendar tempCalendar3 = Calendar.getInstance();
        // 将三个日历对象分别设置成当前TextView中显示的日期时间。
        // calendar对象会根据滑动TextView控件而增加一天或减去一天。
        tempCalendar1.setTime(calendar.getTime());
        tempCalendar2.setTime(calendar.getTime());
        tempCalendar3.setTime(calendar.getTime());

        //创建当天的TextView对象,设置属性及内容
        TextView_Today = new TextView(this);
        TextView_Today.setTextSize(30);
        TextView_Today.setClickable(true);
        TextView_Today.setText(getStringDateShort(tempCalendar1.getTime()));


        //创建下一天的TextView对象,设置属性及内容
        TextView_Nextday = new TextView(this);
        TextView_Nextday.setTextSize(30);
        TextView_Nextday.setClickable(true);
        tempCalendar2.add(Calendar.DAY_OF_MONTH , 1);
        TextView_Nextday.setText(getStringDateShort(tempCalendar2.getTime()));

        //创建前一天的TextView对象,设置属性及内容
        TextView_Prevday = new TextView(this);
        TextView_Prevday.setTextSize(30);
        TextView_Prevday.setClickable(true);
        tempCalendar3.add(Calendar.DAY_OF_MONTH , -1);
        TextView_Prevday.setText(getStringDateShort(tempCalendar3.getTime()));


        //设置TextView的监听事件
        TextView_Today.setOnTouchListener(this);
        TextView_Nextday.setOnTouchListener(this);
        TextView_Prevday.setOnTouchListener(this);


        //如果viewFlipper里有内容则全部删除
        if (viewFlipper.getChildCount() != 0)
        {
            viewFlipper.removeAllViews();
        }
        //将TextView对象添加到ViewFlipper对象中
        viewFlipper.addView(TextView_Today);
        viewFlipper.addView(TextView_Nextday);
        viewFlipper.addView(TextView_Prevday);


    }



}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值