Android Moveview滑屏移动视图类完整实例
这篇文章主要介绍了Android Moveview滑屏移动视图类,很有实用价值,需要的朋友可以参考下
本文示例所述程序为一个Android Moveview移动视图类。其主要实现主屏左右滑屏拖动功能,并适时显示拖动时候屏幕的显示情况,该代码中还包括完整的逻辑。其完整代码如下:
import android.study.shift.ItemView;
import android.study.shift.MainView;
import android.study.shift.Moveview;
import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.MeasureSpec;
public class Moveview extends ViewGroup{
private final static int TOUCH_STATE_REST = 0;
private final static int TOUCH_STATE_MOVING = 1;
private final static int MOVE_TO_LEFT = 1;
//private final static int MOVE_TO_RIGHT = 2;
private final static int MOVE_TO_REST = 0;
public final static int MAIN = 0;
public final static int LEFT = 1;
public final static int RIGHT = 2;
private int touch_state = TOUCH_STATE_REST;
private int move_state = MOVE_TO_REST;
private int now_state = MAIN;
private final float WIDTH_RATE = 0.18f;
private MainView main_show_view;
private ItemView left_show_view;
private int min_distance = 30;//此处只是初始化为30 ,其实不起作用
private int screen_w;
private int screen_h;
private int move_x_v;
private boolean isAimationMoving = false;
private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {//处理消息
synchronized (Moveview.this) {//同步
isAimationMoving = true;
int move_change = (int) (screen_w * WIDTH_RATE / 5);
int left = main_show_view.getView().getLeft();
if (msg.what == 1) {//主屏在向右拖曳。。。
move(move_change + left);//参数为拖出来后主屏的坐标。
}
if (msg.what == 11) {
isAimationMoving = false;
moveToLeft(false); //满足可以显示的要求开始显示,false只是一个判定条件,以区别按钮起的效果
}
if (msg.what == 2) {//代表主屏向左在拖曳。。。
move(-1 * move_change + left);
}
if (msg.what == 12) {
isAimationMoving = false;
//moveToRight(false);
}
if (msg.what == 0) {
if (now_state == LEFT) {//如果现在已经显示左边
move(-1 * move_x_v);//那么还原成主屏
} else {
move(move_x_v);
}
}
if (msg.what == 10) {
isAimationMoving = false;
moveToMain(false);
}
}
}
};
public Moveview(Context context) {
super(context);
}
public Moveview(Context context, AttributeSet attrs) {
super(context, attrs);
}
public Moveview(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public void initView() {
if (main_show_view == null) {
main_show_view = new MainView(this.getContext(), this);
left_show_view = new ItemView(this.getContext());
//right_show_view = new ItemView(this.getContext(), "aaa");
}
this.addView(left_show_view.getView());
//this.addView(right_show_view.getView());
this.addView(main_show_view.getView());
}
public void initContent() {
}
public void move(int start) {//本函数显示拖动的时候屏幕的显示情况。
int left = main_show_view.getView().getLeft();//left代表主屏左边缘的位置坐标。
if (now_state == MAIN) {
if (left > 0) {//如果屏幕的左边被移向右,则left变成正数
if (move_state != MOVE_TO_LEFT) {
move_state = MOVE_TO_LEFT;
}
left_show_view.getView().setVisibility(View.VISIBLE);//设置左边可见
//right_show_view.getView().setVisibility(View.GONE);
} //else if (left < 0) {//如果屏幕的左边被移向左,则left变成负数
//if (move_state != MOVE_TO_RIGHT) {
// move_state = MOVE_TO_RIGHT;
/
精彩图集
精彩文章





