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);
}
}
左右滑动TextView改变日期
最新推荐文章于 2019-06-04 15:38:07 发布