徐航 滑屏控制
This commit is contained in:
parent
75771e8dbb
commit
76e0c6fb5f
|
@ -0,0 +1,69 @@
|
|||
package com.stone.shop.adapter;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.stone.shop.R;
|
||||
import com.stone.shop.model.Classroom;
|
||||
|
||||
import android.content.Context;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.BaseAdapter;
|
||||
import android.widget.TextView;
|
||||
|
||||
public class ClassroomAdapter extends BaseAdapter {
|
||||
|
||||
private Context mContext;
|
||||
private List<Classroom> mNewsList; // 商品列表信息
|
||||
private LayoutInflater mInflater = null;
|
||||
|
||||
public ClassroomAdapter(Context context, List<Classroom> newsList) {
|
||||
mContext = context;
|
||||
mNewsList = newsList;
|
||||
mInflater = LayoutInflater.from(context);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCount() {
|
||||
return mNewsList.size();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getItem(int position) {
|
||||
return mNewsList.get(position);
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getItemId(int position) {
|
||||
return position;
|
||||
}
|
||||
|
||||
// 刷新列表中的数据
|
||||
public void refresh(List<Classroom> list) {
|
||||
mNewsList = list;
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
@Override
|
||||
public View getView(int position, View convertView, ViewGroup parent) {
|
||||
ViewHolder viewHolder;
|
||||
if (convertView == null) {
|
||||
convertView = mInflater.inflate(R.layout.gv_item_classroom, null);
|
||||
viewHolder = new ViewHolder();
|
||||
viewHolder.tv_chooseText = (TextView) convertView.findViewById(R.id.tv_chooseText);
|
||||
convertView.setTag(viewHolder);
|
||||
} else {
|
||||
viewHolder = (ViewHolder) convertView.getTag();
|
||||
}
|
||||
viewHolder.tv_chooseText.setText(mNewsList.get(position).getName());
|
||||
return convertView;
|
||||
}
|
||||
|
||||
class ViewHolder {
|
||||
|
||||
public TextView tv_chooseText; // 博学堂讲座标题
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
package com.stone.shop.model;
|
||||
|
||||
import cn.bmob.v3.BmobObject;
|
||||
|
||||
public class Classroom extends BmobObject {
|
||||
|
||||
private String name;
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "ClassRoom [name=" + name + "]";
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,44 @@
|
|||
package com.stone.shop.model;
|
||||
|
||||
import cn.bmob.v3.BmobObject;
|
||||
|
||||
public class Reservation extends BmobObject {
|
||||
|
||||
private String roomId;
|
||||
private String roomName;
|
||||
private String userId;
|
||||
private String dateTime;
|
||||
|
||||
public String getRoomId() {
|
||||
return roomId;
|
||||
}
|
||||
|
||||
public void setRoomId(String roomId) {
|
||||
this.roomId = roomId;
|
||||
}
|
||||
|
||||
public String getRoomName() {
|
||||
return roomName;
|
||||
}
|
||||
|
||||
public void setRoomName(String roomName) {
|
||||
this.roomName = roomName;
|
||||
}
|
||||
|
||||
public String getUserId() {
|
||||
return userId;
|
||||
}
|
||||
|
||||
public void setUserId(String userId) {
|
||||
this.userId = userId;
|
||||
}
|
||||
|
||||
public String getDateTime() {
|
||||
return dateTime;
|
||||
}
|
||||
|
||||
public void setDateTime(String dateTime) {
|
||||
this.dateTime = dateTime;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,93 @@
|
|||
package com.stone.shop.view;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import cn.bmob.v3.BmobQuery;
|
||||
import cn.bmob.v3.listener.FindListener;
|
||||
|
||||
import com.stone.shop.R;
|
||||
import com.stone.shop.adapter.BXTListAdapter;
|
||||
import com.stone.shop.adapter.ClassroomAdapter;
|
||||
import com.stone.shop.model.Classroom;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.AdapterView.OnItemClickListener;
|
||||
import android.widget.GridView;
|
||||
import android.widget.ListView;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
public class ClassroomActivity extends Activity implements OnItemClickListener {
|
||||
|
||||
private static final String TAG = "BXTActivity";
|
||||
|
||||
private GridView lvBXTNews;
|
||||
private ClassroomAdapter mBxtListAdapter;
|
||||
private List<Classroom> mBXTNewsList;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_classroom);
|
||||
|
||||
initView();
|
||||
initData();
|
||||
|
||||
}
|
||||
|
||||
private void initView() {
|
||||
lvBXTNews = (GridView) findViewById(R.id.gv_classroom);
|
||||
mBXTNewsList = new ArrayList<Classroom>();
|
||||
mBxtListAdapter = new ClassroomAdapter(this, mBXTNewsList);
|
||||
lvBXTNews.setAdapter(mBxtListAdapter);
|
||||
lvBXTNews.setOnItemClickListener(this);
|
||||
|
||||
TextView tv_title = (TextView) findViewById(R.id.tv_title);
|
||||
tv_title.setText("教室");
|
||||
}
|
||||
|
||||
private void initData() {
|
||||
BmobQuery<Classroom> query = new BmobQuery<Classroom>();
|
||||
query.findObjects(this, new FindListener<Classroom>() {
|
||||
|
||||
@Override
|
||||
public void onSuccess(List<Classroom> newsList) {
|
||||
// toast("查询商品成功, 共" + newsList.size());
|
||||
if (newsList.size() == 0)
|
||||
toast("亲, 暂时还木有教室哦");
|
||||
else {
|
||||
mBXTNewsList = newsList;
|
||||
mBxtListAdapter.refresh(newsList);
|
||||
mBxtListAdapter.notifyDataSetChanged();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(int arg0, String arg1) {
|
||||
toast("查询失败");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void toast(String toast) {
|
||||
Toast.makeText(this, toast, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
||||
Intent intent = new Intent(ClassroomActivity.this, ReservationActivity.class);
|
||||
Classroom classroom = mBXTNewsList.get(position);
|
||||
intent.putExtra("roomId", classroom.getObjectId());
|
||||
intent.putExtra("roomName", classroom.getName());
|
||||
startActivity(intent);
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,138 @@
|
|||
package com.stone.shop.view;
|
||||
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import com.stone.shop.R;
|
||||
import com.stone.shop.model.Reservation;
|
||||
import com.stone.shop.model.User;
|
||||
import com.stone.ui.DateTimePickDialogUtil;
|
||||
import com.stone.ui.DateTimePickDialogUtil.DateTimeListener;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.os.Bundle;
|
||||
import android.text.TextUtils;
|
||||
import android.view.View;
|
||||
import android.view.View.OnClickListener;
|
||||
import android.widget.Button;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
import cn.bmob.v3.BmobQuery;
|
||||
import cn.bmob.v3.listener.DeleteListener;
|
||||
import cn.bmob.v3.listener.FindListener;
|
||||
import cn.bmob.v3.listener.SaveListener;
|
||||
|
||||
public class ReservationActivity extends Activity {
|
||||
|
||||
private Button btn_login;
|
||||
private SimpleDateFormat dateFormat;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.layout_reservation);
|
||||
|
||||
TextView tv_title = (TextView) findViewById(R.id.tv_title);
|
||||
tv_title.setText("教室预定");
|
||||
|
||||
final String roomId = getIntent().getStringExtra("roomId");
|
||||
final String roomName = getIntent().getStringExtra("roomName");
|
||||
|
||||
TextView tv_room = (TextView) findViewById(R.id.tv_room);
|
||||
tv_room.setText("教室:" + roomName);
|
||||
|
||||
btn_login = (Button) findViewById(R.id.btn_login);
|
||||
|
||||
dateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm");
|
||||
|
||||
// 查找Person表里面id为6b6c11c537的数据
|
||||
BmobQuery<Reservation> bmobQuery = new BmobQuery<Reservation>();
|
||||
bmobQuery.addWhereEqualTo("userId", User.userId);
|
||||
bmobQuery.addWhereEqualTo("roomId", roomId);
|
||||
bmobQuery.findObjects(ReservationActivity.this, new FindListener<Reservation>() {
|
||||
|
||||
@Override
|
||||
public void onSuccess(List<Reservation> newsList) {
|
||||
// toast("查询商品成功, 共" + newsList.size());
|
||||
if (newsList.size() != 0) {
|
||||
|
||||
String dateTime = newsList.get(0).getDateTime();
|
||||
|
||||
try {
|
||||
if (dateFormat.parse(dateTime).before(new Date())) {
|
||||
|
||||
Reservation gameScore = new Reservation();
|
||||
gameScore.setObjectId(newsList.get(0).getObjectId());
|
||||
gameScore.delete(ReservationActivity.this);
|
||||
|
||||
} else {
|
||||
btn_login.setEnabled(false);
|
||||
btn_login.setText("已经预定" + (TextUtils.isEmpty(dateTime) ? "" : (" " + dateTime)));
|
||||
}
|
||||
} catch (ParseException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(int arg0, String arg1) {
|
||||
toast("查询失败");
|
||||
}
|
||||
});
|
||||
|
||||
btn_login.setOnClickListener(new OnClickListener() {
|
||||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
DateTimePickDialogUtil dateTimePicKDialog = new DateTimePickDialogUtil(ReservationActivity.this,
|
||||
dateFormat.format(new Date()));
|
||||
dateTimePicKDialog.dateTimePicKDialog(new DateTimeListener() {
|
||||
|
||||
@Override
|
||||
public void onDateTimeChane(final String dateTime) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
Reservation reservation = new Reservation();
|
||||
reservation.setRoomId(roomId);
|
||||
reservation.setRoomName(roomName);
|
||||
reservation.setUserId(User.userId);
|
||||
reservation.setDateTime(dateTime);
|
||||
|
||||
reservation.save(ReservationActivity.this, new SaveListener() {
|
||||
|
||||
@Override
|
||||
public void onSuccess() {
|
||||
// TODO Auto-generated method stub
|
||||
toast("预定成功");
|
||||
btn_login.setEnabled(false);
|
||||
btn_login.setText("已经预定 " + dateTime);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(int arg0, String arg1) {
|
||||
// TODO Auto-generated method stub
|
||||
toast("预定失败");
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
private void toast(String toast) {
|
||||
Toast.makeText(this, toast, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,75 @@
|
|||
package com.stone.shop.view;
|
||||
|
||||
import com.stone.shop.R;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.view.animation.AlphaAnimation;
|
||||
import android.view.animation.Animation;
|
||||
import android.view.animation.Animation.AnimationListener;
|
||||
import android.view.animation.AnimationSet;
|
||||
import android.view.animation.RotateAnimation;
|
||||
import android.view.animation.ScaleAnimation;
|
||||
import android.widget.RelativeLayout;
|
||||
|
||||
public class SplashActivity extends Activity {
|
||||
private RelativeLayout rlSplash;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
initView();
|
||||
initAnimation();
|
||||
}
|
||||
|
||||
private void initView() {
|
||||
setContentView(R.layout.activity_splash);
|
||||
rlSplash = (RelativeLayout) findViewById(R.id.rl_splash);
|
||||
}
|
||||
|
||||
private void initAnimation() {
|
||||
AnimationSet set = new AnimationSet(false);
|
||||
RotateAnimation rtAnimation = new RotateAnimation(0, 360,
|
||||
Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
|
||||
0.5f);
|
||||
rtAnimation.setDuration(2000);
|
||||
rtAnimation.setFillAfter(true);
|
||||
|
||||
ScaleAnimation scAnimation = new ScaleAnimation(0, 1, 0, 1,
|
||||
Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
|
||||
0.5f);
|
||||
scAnimation.setDuration(2000);
|
||||
scAnimation.setFillAfter(true);
|
||||
|
||||
AlphaAnimation alAnimation = new AlphaAnimation(0, 1);
|
||||
alAnimation.setDuration(2000);
|
||||
alAnimation.setFillAfter(true);
|
||||
|
||||
set.addAnimation(rtAnimation);
|
||||
set.addAnimation(scAnimation);
|
||||
set.addAnimation(alAnimation);
|
||||
|
||||
set.setAnimationListener(new AnimationListener() {
|
||||
|
||||
@Override
|
||||
public void onAnimationStart(Animation arg0) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAnimationRepeat(Animation arg0) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAnimationEnd(Animation arg0) {
|
||||
startActivity(new Intent(SplashActivity.this,
|
||||
LoginActivity.class));
|
||||
finish();
|
||||
}
|
||||
});
|
||||
|
||||
rlSplash.startAnimation(set);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,200 @@
|
|||
package com.stone.slide;
|
||||
|
||||
import android.R.bool;
|
||||
import android.content.Context;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.Log;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.VelocityTracker;
|
||||
import android.view.View;
|
||||
import android.view.ViewConfiguration;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.View.MeasureSpec;
|
||||
import android.widget.Scroller;
|
||||
|
||||
public class MyScrollLayout extends ViewGroup {
|
||||
|
||||
private static final String TAG = "ScrollLayout";
|
||||
private VelocityTracker mVelocityTracker; // 用于判断甩动手势
|
||||
private static final int SNAP_VELOCITY = 600; //X轴速度基值,大于该值时进行切换
|
||||
private Scroller mScroller; // 滑动控制<EFBFBD>?
|
||||
private int mCurScreen; //当前页面为第几屏
|
||||
private int mDefaultScreen = 0;
|
||||
private float mLastMotionX;
|
||||
|
||||
|
||||
private OnViewChangeListener mOnViewChangeListener;
|
||||
|
||||
public MyScrollLayout(Context context) {
|
||||
super(context);
|
||||
// TODO Auto-generated constructor stub
|
||||
init(context);
|
||||
}
|
||||
|
||||
public MyScrollLayout(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
// TODO Auto-generated constructor stub
|
||||
init(context);
|
||||
}
|
||||
|
||||
private void init(Context context) {
|
||||
mCurScreen = mDefaultScreen;
|
||||
mScroller = new Scroller(context);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onLayout(boolean changed, int l, int t, int r, int b) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
Log.e("a", "a");
|
||||
if (changed) {
|
||||
int childLeft = 0;
|
||||
final int childCount = getChildCount();
|
||||
Log.e("count", childCount+"");
|
||||
for (int i = 0; i < childCount; i++) {
|
||||
final View childView = getChildAt(i);
|
||||
if (childView.getVisibility() != View.GONE) {
|
||||
final int childWidth = childView.getMeasuredWidth();
|
||||
childView.layout(childLeft, 0, childLeft + childWidth,
|
||||
childView.getMeasuredHeight());
|
||||
childLeft += childWidth;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
||||
// TODO Auto-generated method stub
|
||||
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
|
||||
|
||||
Log.e("b", "b");
|
||||
final int width = MeasureSpec.getSize(widthMeasureSpec);
|
||||
|
||||
final int count = getChildCount();
|
||||
for (int i = 0; i < count; i++) {
|
||||
getChildAt(i).measure(widthMeasureSpec, heightMeasureSpec);
|
||||
}
|
||||
|
||||
scrollTo(mCurScreen * width, 0);
|
||||
|
||||
}
|
||||
|
||||
public void snapToDestination() {
|
||||
final int screenWidth = getWidth();
|
||||
|
||||
final int destScreen = (getScrollX() + screenWidth / 2) / screenWidth;
|
||||
snapToScreen(destScreen);
|
||||
}
|
||||
|
||||
//使屏幕移动到第whichScreen+1屏
|
||||
public void snapToScreen(int whichScreen) {
|
||||
|
||||
if (getScrollX() != (whichScreen * getWidth())) {
|
||||
final int delta = whichScreen * getWidth() - getScrollX();
|
||||
mScroller.startScroll(getScrollX(), 0, delta, 0,
|
||||
Math.abs(delta) * 2);
|
||||
mCurScreen = whichScreen;
|
||||
invalidate();
|
||||
|
||||
if (mOnViewChangeListener != null) {
|
||||
mOnViewChangeListener.OnViewChange(mCurScreen);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void computeScroll() {
|
||||
// TODO Auto-generated method stub
|
||||
if (mScroller.computeScrollOffset()) {
|
||||
scrollTo(mScroller.getCurrX(), mScroller.getCurrY());
|
||||
postInvalidate();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onTouchEvent(MotionEvent event) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
final int action = event.getAction();
|
||||
final float x = event.getX();
|
||||
final float y = event.getY();
|
||||
|
||||
switch (action) {
|
||||
case MotionEvent.ACTION_DOWN:
|
||||
|
||||
Log.i("", "onTouchEvent ACTION_DOWN");
|
||||
if (mVelocityTracker == null) {
|
||||
mVelocityTracker = VelocityTracker.obtain();
|
||||
mVelocityTracker.addMovement(event);
|
||||
}
|
||||
if (!mScroller.isFinished()) {
|
||||
mScroller.abortAnimation();
|
||||
}
|
||||
mLastMotionX = x;
|
||||
break;
|
||||
|
||||
case MotionEvent.ACTION_MOVE:
|
||||
|
||||
int deltaX = (int) (mLastMotionX - x);
|
||||
if (IsCanMove(deltaX)) {
|
||||
if (mVelocityTracker != null) {
|
||||
mVelocityTracker.addMovement(event);
|
||||
}
|
||||
mLastMotionX = x;
|
||||
//正向或者负向移动,屏幕跟随手指移动
|
||||
scrollBy(deltaX, 0);
|
||||
}
|
||||
break;
|
||||
|
||||
case MotionEvent.ACTION_UP:
|
||||
|
||||
int velocityX = 0;
|
||||
if (mVelocityTracker != null) {
|
||||
mVelocityTracker.addMovement(event);
|
||||
mVelocityTracker.computeCurrentVelocity(1000);
|
||||
//得到X轴方向手指移动速度
|
||||
velocityX = (int) mVelocityTracker.getXVelocity();
|
||||
}
|
||||
//velocityX为正值说明手指向右滑动,为负值说明手指向左滑动
|
||||
if (velocityX > SNAP_VELOCITY && mCurScreen > 0) {
|
||||
// Fling enough to move left
|
||||
Log.e(TAG, "snap left");
|
||||
snapToScreen(mCurScreen - 1);
|
||||
} else if (velocityX < -SNAP_VELOCITY
|
||||
&& mCurScreen < getChildCount() - 1) {
|
||||
// Fling enough to move right
|
||||
Log.e(TAG, "snap right");
|
||||
snapToScreen(mCurScreen + 1);
|
||||
} else {
|
||||
snapToDestination();
|
||||
}
|
||||
|
||||
if (mVelocityTracker != null) {
|
||||
mVelocityTracker.recycle();
|
||||
mVelocityTracker = null;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
private boolean IsCanMove(int deltaX) {
|
||||
//deltaX<0说明手指向右划
|
||||
if (getScrollX() <= 0 && deltaX < 0) {
|
||||
return false;
|
||||
}
|
||||
//deltaX>0说明手指向左划
|
||||
if (getScrollX() >= (getChildCount() - 1) * getWidth() && deltaX > 0) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public void SetOnViewChangeListener(OnViewChangeListener listener) {
|
||||
mOnViewChangeListener = listener;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
package com.stone.slide;
|
||||
|
||||
public interface OnViewChangeListener {
|
||||
public void OnViewChange(int view);
|
||||
}
|
|
@ -0,0 +1,102 @@
|
|||
package com.stone.slide;
|
||||
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.view.animation.Animation;
|
||||
import android.view.animation.Animation.AnimationListener;
|
||||
import android.view.animation.AnimationUtils;
|
||||
import android.widget.Button;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.RelativeLayout;
|
||||
|
||||
public class TestOpen extends Activity implements OnViewChangeListener{
|
||||
|
||||
private MyScrollLayout mScrollLayout;
|
||||
private ImageView[] imgs;
|
||||
private int count;
|
||||
private int currentItem;
|
||||
private Button startBtn;
|
||||
private RelativeLayout mainRLayout;
|
||||
private LinearLayout pointLLayout;
|
||||
private LinearLayout leftLayout;
|
||||
private LinearLayout rightLayout;
|
||||
private LinearLayout animLayout;
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.main);
|
||||
initView();
|
||||
}
|
||||
|
||||
private void initView() {
|
||||
mScrollLayout = (MyScrollLayout) findViewById(R.id.ScrollLayout);
|
||||
pointLLayout = (LinearLayout) findViewById(R.id.llayout);
|
||||
mainRLayout = (RelativeLayout) findViewById(R.id.mainRLayout);
|
||||
startBtn = (Button) findViewById(R.id.startBtn);
|
||||
startBtn.setOnClickListener(onClick);
|
||||
animLayout = (LinearLayout) findViewById(R.id.animLayout);
|
||||
leftLayout = (LinearLayout) findViewById(R.id.leftLayout);
|
||||
rightLayout = (LinearLayout) findViewById(R.id.rightLayout);
|
||||
count = mScrollLayout.getChildCount();
|
||||
imgs = new ImageView[count];
|
||||
for(int i = 0; i< count;i++) {
|
||||
imgs[i] = (ImageView) pointLLayout.getChildAt(i);
|
||||
imgs[i].setEnabled(true);
|
||||
imgs[i].setTag(i);
|
||||
}
|
||||
currentItem = 0;
|
||||
imgs[currentItem].setEnabled(false);
|
||||
mScrollLayout.SetOnViewChangeListener(this);
|
||||
}
|
||||
|
||||
private View.OnClickListener onClick = new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
switch (v.getId()) {
|
||||
case R.id.startBtn:
|
||||
mScrollLayout.setVisibility(View.GONE);
|
||||
pointLLayout.setVisibility(View.GONE);
|
||||
animLayout.setVisibility(View.VISIBLE);
|
||||
mainRLayout.setBackgroundResource(R.drawable.whatsnew_bg);
|
||||
Animation leftOutAnimation = AnimationUtils.loadAnimation(TestWeiXinOpen.this, R.anim.translate_left);
|
||||
Animation rightOutAnimation = AnimationUtils.loadAnimation(TestWeiXinOpen.this, R.anim.translate_right);
|
||||
leftLayout.startAnimation(leftOutAnimation);
|
||||
rightLayout.startAnimation(rightOutAnimation);
|
||||
leftOutAnimation.setAnimationListener(new AnimationListener() {
|
||||
@Override
|
||||
public void onAnimationStart(Animation animation) {
|
||||
mainRLayout.setBackgroundColor(R.color.bgColor);
|
||||
}
|
||||
@Override
|
||||
public void onAnimationRepeat(Animation animation) {
|
||||
}
|
||||
@Override
|
||||
public void onAnimationEnd(Animation animation) {
|
||||
leftLayout.setVisibility(View.GONE);
|
||||
rightLayout.setVisibility(View.GONE);
|
||||
}
|
||||
});
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@Override
|
||||
public void OnViewChange(int position) {
|
||||
setcurrentPoint(position);
|
||||
}
|
||||
|
||||
private void setcurrentPoint(int position) {
|
||||
if(position < 0 || position > count -1 || currentItem == position) {
|
||||
return;
|
||||
}
|
||||
imgs[currentItem].setEnabled(true);
|
||||
imgs[position].setEnabled(false);
|
||||
currentItem = position;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,188 @@
|
|||
package com.stone.ui;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Calendar;
|
||||
|
||||
import com.stone.shop.R;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.AlertDialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.widget.DatePicker;
|
||||
import android.widget.DatePicker.OnDateChangedListener;
|
||||
import android.widget.EditText;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TimePicker;
|
||||
import android.widget.TimePicker.OnTimeChangedListener;
|
||||
|
||||
/**
|
||||
* 日期时间选择控件 使用方法: private EditText inputDate;//需要设置的日期时间文本编辑框 private String
|
||||
* initDateTime="2012年9月3日 14:44",//初始日期时间值 在点击事件中使用:
|
||||
* inputDate.setOnClickListener(new OnClickListener() {
|
||||
*
|
||||
* @Override public void onClick(View v) { DateTimePickDialogUtil
|
||||
* dateTimePicKDialog=new
|
||||
* DateTimePickDialogUtil(SinvestigateActivity.this,initDateTime);
|
||||
* dateTimePicKDialog.dateTimePicKDialog(inputDate);
|
||||
*
|
||||
* } });
|
||||
*
|
||||
* @author
|
||||
*/
|
||||
public class DateTimePickDialogUtil implements OnDateChangedListener, OnTimeChangedListener {
|
||||
private DatePicker datePicker;
|
||||
private TimePicker timePicker;
|
||||
private AlertDialog ad;
|
||||
private String dateTime;
|
||||
private String initDateTime;
|
||||
private Activity activity;
|
||||
private DateTimeListener dateTimeListener;
|
||||
|
||||
/**
|
||||
* 日期时间弹出选择框构造函数
|
||||
*
|
||||
* @param activity
|
||||
* :调用的父activity
|
||||
* @param initDateTime
|
||||
* 初始日期时间值,作为弹出窗口的标题和日期时间初始值
|
||||
*/
|
||||
public DateTimePickDialogUtil(Activity activity, String initDateTime) {
|
||||
this.activity = activity;
|
||||
this.initDateTime = initDateTime;
|
||||
|
||||
}
|
||||
|
||||
public void init(DatePicker datePicker, TimePicker timePicker) {
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
if (!(null == initDateTime || "".equals(initDateTime))) {
|
||||
calendar = this.getCalendarByInintData(initDateTime);
|
||||
} else {
|
||||
initDateTime = calendar.get(Calendar.YEAR) + "年" + calendar.get(Calendar.MONTH) + "月"
|
||||
+ calendar.get(Calendar.DAY_OF_MONTH) + "日 " + calendar.get(Calendar.HOUR_OF_DAY) + ":"
|
||||
+ calendar.get(Calendar.MINUTE);
|
||||
}
|
||||
|
||||
datePicker.init(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH),
|
||||
this);
|
||||
timePicker.setCurrentHour(calendar.get(Calendar.HOUR_OF_DAY));
|
||||
timePicker.setCurrentMinute(calendar.get(Calendar.MINUTE));
|
||||
}
|
||||
|
||||
/**
|
||||
* 弹出日期时间选择框方法
|
||||
*
|
||||
* @param inputDate
|
||||
* :为需要设置的日期时间文本编辑框
|
||||
* @return
|
||||
*/
|
||||
public AlertDialog dateTimePicKDialog(final DateTimeListener dateTimeListener) {
|
||||
LinearLayout dateTimeLayout = (LinearLayout) activity.getLayoutInflater().inflate(R.layout.common_datetime,
|
||||
null);
|
||||
datePicker = (DatePicker) dateTimeLayout.findViewById(R.id.datepicker);
|
||||
timePicker = (TimePicker) dateTimeLayout.findViewById(R.id.timepicker);
|
||||
init(datePicker, timePicker);
|
||||
timePicker.setIs24HourView(true);
|
||||
timePicker.setOnTimeChangedListener(this);
|
||||
|
||||
ad = new AlertDialog.Builder(activity).setTitle(initDateTime).setView(dateTimeLayout)
|
||||
.setPositiveButton("设置", new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog, int whichButton) {
|
||||
|
||||
if (dateTimeListener != null) {
|
||||
dateTimeListener.onDateTimeChane(dateTime);
|
||||
}
|
||||
}
|
||||
}).setNegativeButton("取消", new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog, int whichButton) {
|
||||
|
||||
}
|
||||
}).show();
|
||||
|
||||
onDateChanged(null, 0, 0, 0);
|
||||
return ad;
|
||||
}
|
||||
|
||||
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
|
||||
onDateChanged(null, 0, 0, 0);
|
||||
}
|
||||
|
||||
public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
|
||||
// 获得日历实例
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
|
||||
calendar.set(datePicker.getYear(), datePicker.getMonth(), datePicker.getDayOfMonth(),
|
||||
timePicker.getCurrentHour(), timePicker.getCurrentMinute());
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm");
|
||||
|
||||
dateTime = sdf.format(calendar.getTime());
|
||||
ad.setTitle(dateTime);
|
||||
}
|
||||
|
||||
/**
|
||||
* 实现将初始日期时间2012年07月02日 16:45 拆分成年 月 日 时 分 秒,并赋值给calendar
|
||||
*
|
||||
* @param initDateTime
|
||||
* 初始日期时间值 字符串型
|
||||
* @return Calendar
|
||||
*/
|
||||
private Calendar getCalendarByInintData(String initDateTime) {
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
|
||||
// 将初始日期时间2012年07月02日 16:45 拆分成年 月 日 时 分 秒
|
||||
String date = spliteString(initDateTime, "日", "index", "front"); // 日期
|
||||
String time = spliteString(initDateTime, "日", "index", "back"); // 时间
|
||||
|
||||
String yearStr = spliteString(date, "年", "index", "front"); // 年份
|
||||
String monthAndDay = spliteString(date, "年", "index", "back"); // 月日
|
||||
|
||||
String monthStr = spliteString(monthAndDay, "月", "index", "front"); // 月
|
||||
String dayStr = spliteString(monthAndDay, "月", "index", "back"); // 日
|
||||
|
||||
String hourStr = spliteString(time, ":", "index", "front"); // 时
|
||||
String minuteStr = spliteString(time, ":", "index", "back"); // 分
|
||||
|
||||
int currentYear = Integer.valueOf(yearStr.trim()).intValue();
|
||||
int currentMonth = Integer.valueOf(monthStr.trim()).intValue() - 1;
|
||||
int currentDay = Integer.valueOf(dayStr.trim()).intValue();
|
||||
int currentHour = Integer.valueOf(hourStr.trim()).intValue();
|
||||
int currentMinute = Integer.valueOf(minuteStr.trim()).intValue();
|
||||
|
||||
calendar.set(currentYear, currentMonth, currentDay, currentHour, currentMinute);
|
||||
return calendar;
|
||||
}
|
||||
|
||||
/**
|
||||
* 截取子串
|
||||
*
|
||||
* @param srcStr
|
||||
* 源串
|
||||
* @param pattern
|
||||
* 匹配模式
|
||||
* @param indexOrLast
|
||||
* @param frontOrBack
|
||||
* @return
|
||||
*/
|
||||
public static String spliteString(String srcStr, String pattern, String indexOrLast, String frontOrBack) {
|
||||
String result = "";
|
||||
int loc = -1;
|
||||
if (indexOrLast.equalsIgnoreCase("index")) {
|
||||
loc = srcStr.indexOf(pattern); // 取得字符串第一次出现的位置
|
||||
} else {
|
||||
loc = srcStr.lastIndexOf(pattern); // 最后一个匹配串的位置
|
||||
}
|
||||
if (frontOrBack.equalsIgnoreCase("front")) {
|
||||
if (loc != -1)
|
||||
result = srcStr.substring(0, loc); // 截取子串
|
||||
} else {
|
||||
if (loc != -1)
|
||||
result = srcStr.substring(loc + 1, srcStr.length()); // 截取子串
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public interface DateTimeListener {
|
||||
|
||||
void onDateTimeChane(String dateTime);
|
||||
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue