Android三种左右滑动效果 手势识别
手势识别
1.onCreate中添加GestureDetector mGestureDetector;
//监听手势事件
mGestureDetector = new GestureDetector(this, onGestureListener);
2.//实现处理事件
OnGestureListener onGestureListener = new OnGestureListener() {
//添加未实现的方法
};
3.重写onTouch事件
//交由手势探测接口处理触摸事件
public boolean onTouchEvent(MotionEvent event) {
return mGestureDetector.onTouchEvent(event);
}
左右滑动效果
1、在xml中定义ViewFlipper控件;
2、重写onTouchEvent方法,用于捕获Touch事件
3、写push_left_in.xml、push_left_out.xml、push_right_in.xml、push_right_out.xml文件,用于滑动时的效果显现;
4、在Activity中定义OnGestureListener,重写onFling方法,根据e1、e2的坐标差判断左右滑动,同时在里面写滑动的效果。
@Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { if (e1.getX() - e2.getX() > 120) { this.flipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.push_left_in)); this.flipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.push_left_out)); this.flipper.showNext(); return true; } else if (e1.getX() - e2.getX() < -120) { this.flipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.push_right_in)); this.flipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.push_right_out)); this.flipper.showPrevious(); return true; } return false; }
工程下载:GuideViewTest.rar
来自:http://www.cnblogs.com/hanyonglu/archive/2012/02/13/2349827.html
左右滑动指引效果
1、加入android-support-v4.jar,关于android-support-v4.jar的详细信息,大家可以访问google官方网站:http://developer.android.com/sdk/compatibility-library.html;
2、XML中,用FrameLayout完成布局,放入ViewPager和指引图标
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > <include layout="@layout/item_header" /> <android.support.v4.view.ViewPager android:id="@+id/guidePages" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout> <!-- 指引图标 --> <LinearLayout android:id="@+id/viewGroup" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="bottom" android:layout_marginBottom="40dp" android:gravity="center_horizontal" android:orientation="horizontal" > </LinearLayout> </FrameLayout>
3、将页面布局加入View的列表中,有几个布局页面就有几个圆点图片,通过for循环设置圆点图片的布局;
//添加到View的List中 LayoutInflater inflater = getLayoutInflater(); pageViews = new ArrayList<View>(); pageViews.add(inflater.inflate(R.layout.item05, null)); pageViews.add(inflater.inflate(R.layout.item06, null)); pageViews.add(inflater.inflate(R.layout.item01, null)); pageViews.add(inflater.inflate(R.layout.item02, null)); pageViews.add(inflater.inflate(R.layout.item03, null)); pageViews.add(inflater.inflate(R.layout.item04, null)); // 有几个布局页面就有几个圆点图片 imageViews = new ImageView[pageViews.size()]; // 通过for循环设置圆点图片的布局 for (int i = 0; i < pageViews.size(); i++) { imageView = new ImageView(GuideViewTestActivity.this); imageView.setLayoutParams(new LayoutParams(20, 20)); imageView.setPadding(20, 0, 20, 0); imageViews[i] = imageView; if (i == 0) { // 默认选中第一张图片 imageViews[i].setBackgroundResource(R.drawable.page_indicator_focused); } else{ imageViews[i].setBackgroundResource(R.drawable.page_indicator); } group.addView(imageViews[i]); }
4、数据适配器和页面切换事件监听器
5、在指引页面更改事件监听器(GuidePageChangeListener)中要确保在切换页面时下面的圆点图片也跟着改变
@Override public void onPageSelected(int arg0) { for (int i = 0; i < imageViews.length; i++) { imageViews[arg0].setBackgroundResource(R.drawable.page_indicator_focused); if (arg0 != i) { imageViews[i].setBackgroundResource(R.drawable.page_indicator); } } }
工程下载:MyAndroidFlip.rar
来自:http://www.cnblogs.com/hanyonglu/archive/2012/04/07/2435589.html
渐显按钮的左右滑动效果
1、XML中,定义ViewFlipper控件,在里面加入多个页面布局,也可以用代码ViewFlipper的addView方法;
2、写push_left_in.xml、push_left_out.xml、push_right_in.xml、push_right_out.xml文件;
3、加入权限
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
4、在Activity中,初始化左右悬浮按钮,创建左右按钮,并设置监听事件(替换图片);
/** * 初始化悬浮按钮 */ private void initImageButtonView() { // 获取WindowManager wm = (WindowManager) getApplicationContext().getSystemService("window"); // 设置LayoutParams相关参数 wmParams = new WindowManager.LayoutParams(); // 设置window type wmParams.type = LayoutParams.TYPE_PHONE; // 设置图片格式,效果为背景透明 wmParams.format = PixelFormat.RGBA_8888; // 设置Window flag参数 wmParams.flags = LayoutParams.FLAG_NOT_TOUCH_MODAL | LayoutParams.FLAG_NOT_FOCUSABLE; // 设置x、y初始值 wmParams.x = 0; wmParams.y = 0; // 设置窗口长宽数据 wmParams.width = 50; wmParams.height = 50; // 创建左右按钮 createLeftButtonView(); createRightButtonView(); }
5、重写onTouchEvent事件,用于触发显示和隐藏悬浮按钮事件(MotionEvent.ACTION_DOWN和MotionEvent.ACTION_UP);
6、利用线程,控制悬浮按钮的透明度(Alpha和invalidate)
工程下载:MyPageFliper.rar
来自:http://www.cnblogs.com/hanyonglu/archive/2012/02/13/2350171.html