4 个解决方案
#1
像这种定制类型的,自定义吧,我觉得可以继承horizontalScrollview实现
#2
或者用ViewPager
#3
有没有Demo可以提供参考呢?
#4
Android原生的时间选择器是:DatePicker。
要实现横移选择,肯定要自定义,至于组件,可以去继承ViewPager或者ViewFlipper都可以。
这里写一个ViewFlipper的简单例子,你根据自己需求完善。
flipper_layout.xml:
date_view.xml:
急着回家,没有验证,你自个验证一下,在fliper_layout.xml加两个左右箭头,然后获取日期用setDate()方法设置一下既可,大概原理是这样。
要实现横移选择,肯定要自定义,至于组件,可以去继承ViewPager或者ViewFlipper都可以。
这里写一个ViewFlipper的简单例子,你根据自己需求完善。
package com.example.androiddemo.activity;
Activity类:
import android.app.Activity;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.TextView;
import android.widget.ViewFlipper;
import com.example.androiddemo.R;
public class ViewFlipperActivity extends Activity{
private ViewFlipper mFlipper;
private View centerView;//该View便为你中间的日期.
private TextView yearText;
private TextView monthAndDayText;
private GestureDetector gestureDetector = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.flipper_layout);
init();
}
private void init(){
mFlipper = (ViewFlipper)findViewById(R.id.view_flipper);
centerView = LayoutInflater.from(this).inflate(R.layout.date_view, null);
yearText = (TextView)centerView.findViewById(R.id.date_year);
monthAndDayText = (TextView)centerView.findViewById(R.id.date_month_and_day);
gestureDetector = new GestureDetector(this,new MyGestureListener());
mFlipper.removeAllViews();
mFlipper.addView(centerView, 0);
centerView.setOnTouchListener(new OnTouchListener() {
// 将centerView中的触摸事件回传给gestureDetector
public boolean onTouch(View v, MotionEvent event) {
return gestureDetector.onTouchEvent(event);
}
});
}
private void setDate(String year,String month,String day){
yearText.setText(year);
monthAndDayText.setText(month+" "+day);
}
private void next(int flag){
mFlipper.removeAllViews();
//此处获取数据,调用setDate(String year,String month,String day);
mFlipper.addView(centerView, flag);
flag++;
}
private void prev(int flag){
mFlipper.removeAllViews();
//此处获取数据,调用setDate(String year,String month,String day);
mFlipper.addView(centerView, flag);
flag--;
}
private class MyGestureListener extends SimpleOnGestureListener{
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
int gvFlag = 0;
if (e1.getX() - e2.getX() > 120) {
// 向左滑动
next(gvFlag);
return true;
} else if (e1.getX() - e2.getX() < -120) {
// 向右滑动
prev(gvFlag);
return true;
}
return false;
}
}
}
flipper_layout.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ViewFlipper
android:id="@+id/view_flipper"
android:layout_width="match_parent"
android:layout_height="match_parent"
></ViewFlipper>
</LinearLayout>
date_view.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:id="@+id/date_year"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#904E92"
android:textSize="16.0sp"
android:textStyle="bold"
/>
<TextView
android:id="@+id/date_month_and_day"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#8A5F7E"
android:textSize="14.0sp"
android:layout_marginTop="5.0dip"
/>
</LinearLayout>
急着回家,没有验证,你自个验证一下,在fliper_layout.xml加两个左右箭头,然后获取日期用setDate()方法设置一下既可,大概原理是这样。
#1
像这种定制类型的,自定义吧,我觉得可以继承horizontalScrollview实现
#2
或者用ViewPager
#3
有没有Demo可以提供参考呢?
#4
Android原生的时间选择器是:DatePicker。
要实现横移选择,肯定要自定义,至于组件,可以去继承ViewPager或者ViewFlipper都可以。
这里写一个ViewFlipper的简单例子,你根据自己需求完善。
flipper_layout.xml:
date_view.xml:
急着回家,没有验证,你自个验证一下,在fliper_layout.xml加两个左右箭头,然后获取日期用setDate()方法设置一下既可,大概原理是这样。
要实现横移选择,肯定要自定义,至于组件,可以去继承ViewPager或者ViewFlipper都可以。
这里写一个ViewFlipper的简单例子,你根据自己需求完善。
package com.example.androiddemo.activity;
Activity类:
import android.app.Activity;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.TextView;
import android.widget.ViewFlipper;
import com.example.androiddemo.R;
public class ViewFlipperActivity extends Activity{
private ViewFlipper mFlipper;
private View centerView;//该View便为你中间的日期.
private TextView yearText;
private TextView monthAndDayText;
private GestureDetector gestureDetector = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.flipper_layout);
init();
}
private void init(){
mFlipper = (ViewFlipper)findViewById(R.id.view_flipper);
centerView = LayoutInflater.from(this).inflate(R.layout.date_view, null);
yearText = (TextView)centerView.findViewById(R.id.date_year);
monthAndDayText = (TextView)centerView.findViewById(R.id.date_month_and_day);
gestureDetector = new GestureDetector(this,new MyGestureListener());
mFlipper.removeAllViews();
mFlipper.addView(centerView, 0);
centerView.setOnTouchListener(new OnTouchListener() {
// 将centerView中的触摸事件回传给gestureDetector
public boolean onTouch(View v, MotionEvent event) {
return gestureDetector.onTouchEvent(event);
}
});
}
private void setDate(String year,String month,String day){
yearText.setText(year);
monthAndDayText.setText(month+" "+day);
}
private void next(int flag){
mFlipper.removeAllViews();
//此处获取数据,调用setDate(String year,String month,String day);
mFlipper.addView(centerView, flag);
flag++;
}
private void prev(int flag){
mFlipper.removeAllViews();
//此处获取数据,调用setDate(String year,String month,String day);
mFlipper.addView(centerView, flag);
flag--;
}
private class MyGestureListener extends SimpleOnGestureListener{
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
int gvFlag = 0;
if (e1.getX() - e2.getX() > 120) {
// 向左滑动
next(gvFlag);
return true;
} else if (e1.getX() - e2.getX() < -120) {
// 向右滑动
prev(gvFlag);
return true;
}
return false;
}
}
}
flipper_layout.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ViewFlipper
android:id="@+id/view_flipper"
android:layout_width="match_parent"
android:layout_height="match_parent"
></ViewFlipper>
</LinearLayout>
date_view.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:id="@+id/date_year"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#904E92"
android:textSize="16.0sp"
android:textStyle="bold"
/>
<TextView
android:id="@+id/date_month_and_day"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#8A5F7E"
android:textSize="14.0sp"
android:layout_marginTop="5.0dip"
/>
</LinearLayout>
急着回家,没有验证,你自个验证一下,在fliper_layout.xml加两个左右箭头,然后获取日期用setDate()方法设置一下既可,大概原理是这样。