Android 实现view手势滑动
来源:互联网 发布:网络喷子国家治理 编辑:程序博客网 时间:2024/06/03 16:01
前段时间有个朋友问我在Android中怎么去实现view手势滑动,对这个实现的思路则是:监听手势触摸的坐标来实现view坐标的变化,从而实现view的滑动效果。通过Layout()方法来实现滑动,滑动后的目标位置的坐标传递给Layout,这样子就会把view的位置给重新布置了一下,在视觉上就是view的一个滑动的效果。重写onTouchEvent方法。代码很简单,用getX()和getY()获得的是在视图坐标系中的值(),然后将前后移动的增量传递给layout方法而已。值得注意的是,onTouchEvent的返回值为true,让子View消耗这个触摸事件,这涉及到事件分发机制,不懂的同学可以学习一下。
我们来看一下效果图
接下来我们看怎么实现这个自定义view:
package com.haiwei.slideview;import android.annotation.SuppressLint;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Paint.Align;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;import android.view.WindowManager;/** * 手势滑动view * @author haiwei * */public class SlideView extends View{/** * 最后滑动的X坐标 */private int lastX;/** * 最后滑动的Y坐标 */private int lastY;private Paint mPaint;private Paint mTextPaint;/** * 自定义view初始化显示的X坐标 */private int screenX;/** * 自定义view初始化显示的Y坐标 */private int screenY;public SlideView(Context context) {super(context);init(context);}public SlideView(Context context, AttributeSet attrs) {super(context, attrs);init(context);}private void init(Context context){ mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);mPaint.setColor(Color.RED);mPaint.setStrokeWidth(20);mPaint.setStyle(Paint.Style.FILL_AND_STROKE);//获取屏幕的宽高初始化view显示的位置WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); screenX = wm.getDefaultDisplay().getWidth() / 2; screenY = wm.getDefaultDisplay().getHeight() / 2; mTextPaint = new Paint(); //设置画笔抗锯齿 mTextPaint.setAntiAlias(true); //设置文本居中 mTextPaint.setTextAlign(Align.CENTER); //设置字体大小 mTextPaint.setTextSize(36); //设置画笔颜色 mTextPaint.setColor(Color.WHITE);}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);canvas.drawCircle(screenX, screenY, 100, mPaint);canvas.drawText("手势滑动按钮", screenX, screenY, mTextPaint);}@SuppressLint("NewApi")@Overridepublic boolean onTouchEvent(MotionEvent event) {//获取当前手指的坐标int currentX = (int) event.getX();int currentY = (int) event.getY();switch (event.getAction()) {case MotionEvent.ACTION_DOWN:lastX = currentX;lastY = currentY; break;case MotionEvent.ACTION_MOVE://获取当前偏移的坐标 int biasX = currentX - lastX;int biasY = currentY - lastY;//重写layout方法改变控件所在屏幕的位置layout(getLeft()+biasX, getTop()+biasY, getRight()+biasX, getBottom()+biasY);break;}return true;}}
在XML布局文件里面引用即可:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/rl" android:layout_width="match_parent" android:layout_height="match_parent" > <com.haiwei.slideview.SlideView android:layout_width="wrap_content" android:layout_height="wrap_content" /></RelativeLayout>
好了今天就讲这么多了,谢谢大家多多支持和评论 再见.....
0 0
- Android 实现view手势滑动
- view实现手势滑动
- Android 自定义View 实现手势监听,左右滑动,上下滑动
- android 实现 view 滑动
- Android使用GestureDetector实现手势滑动效果
- Android 实现手势滑动界面(ViewPager)
- Android获取触摸手势实现左右滑动
- Android-手势-实现图片左右滑动效果
- android手势操作&&实现滑动切换activity
- android中view手势滑动冲突的两种解决方法
- android手势滑动——左右滑动效果实现
- ViewFlipper实现手势滑动
- 【Android】Android View的滑动实现
- android 手势左右滑动
- android手势左右滑动
- android 手势左右滑动
- android 手势滑动
- android 手势滑动demo
- Error 1017 received logging on to the standby
- UNP——Chapter 7:套接字选项
- 虚线
- Linux多线程同步的几种方式
- [BZOJ1034][ZJOI2008]泡泡堂BNB
- Android 实现view手势滑动
- DirecX学习一:重新认识D3DFVF_XYZRHW、D3DPT_POINTLIST、D3DPT_LINELIST
- leetcode 78. Subsets
- D3_collections系列
- 回文解码
- 如何用数据来做渠道效果的分析(工具篇)
- 算法优解(2)-猫狗队列
- Could not calculate build plan Maven设置代理
- "Unexpected value from nativeGetEnabledTags: 0"log的过滤