当前位置: 首页 > news >正文

怎样申请建网站合肥seo网站排名

怎样申请建网站,合肥seo网站排名,设计师网名昵称,怎么给网站添加关键词一、GestureDetector 1. 简介 GestureDetector主要用于检测单指手势#xff0c;例如单击、长按、滑动等#xff0c;不支持多指手势。 2. SimpleOnGestureListener 内部类 GestureDetector.SimpleOnGestureListener 是用于处理手势事件的辅助类#xff0c;它包含了一系列…一、GestureDetector 1. 简介 GestureDetector主要用于检测单指手势例如单击、长按、滑动等不支持多指手势。 2. SimpleOnGestureListener 内部类 GestureDetector.SimpleOnGestureListener 是用于处理手势事件的辅助类它包含了一系列回调方法用于处理不同类型的单指手势事件。下面是对每个回调方法的简要介绍 onDown(MotionEvent e): 当用户按下Down手指时触发。这个方法返回 true 表示事件被消费了false 表示未被消费。 onShowPress(MotionEvent e): 当用户按下并保持按压一段时间时触发。它表示按下动作已被识别但尚未发生其它任何行为。 onSingleTapUp(MotionEvent e): 当用户轻击屏幕时触发。这个方法返回 true 表示事件被消费了false 表示未被消费。 onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY): 当用户在屏幕上滚动时触发。它提供了滚动开始和结束时的事件信息以及在X和Y方向上的距离差。 onLongPress(MotionEvent e): 当用户长按屏幕时触发。 onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY): 当用户迅速滑动手指并松开时触发。它提供了滑动开始和结束时的事件信息以及在X和Y方向上的速度。 onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY): 当用户在屏幕上滚动时触发。与第四个回调方法不同这个方法在滚动过程中持续触发而不仅仅是在滚动结束时触发。 onDoubleTap(MotionEvent e): 当用户双击屏幕时触发。 onDoubleTapEvent(MotionEvent e): 当双击事件包含按下、移动和抬起动作时触发。通常与 onDoubleTap() 结合使用以处理更复杂的双击手势。 onSingleTapConfirmed(MotionEvent e): 当确认发生了单击事件时触发。与 onSingleTapUp() 不同的是这个方法确保了事件是单击事件而不是双击事件。 这些回调方法提供了处理各种类型手势事件的灵活性可以根据需求选择实现相应的方法来处理手势事件。 3. 示例 import android.content.Context; import android.util.AttributeSet; import android.view.GestureDetector; import android.view.MotionEvent; import android.view.View;public class MyView extends View {private GestureDetector gestureDetector;public MyView(Context context, AttributeSet attrs) {super(context, attrs);// 实例化 GestureDetector并传入 SimpleOnGestureListener 对象gestureDetector new GestureDetector(context, new MyGestureListener());}Overridepublic boolean onTouchEvent(MotionEvent event) {// 将触摸事件传递给 GestureDetectorreturn gestureDetector.onTouchEvent(event) || super.onTouchEvent(event);}private class MyGestureListener extends GestureDetector.SimpleOnGestureListener {Overridepublic boolean onDown(MotionEvent e) {// 用户按下屏幕时触发return true; // 返回 true 表示事件被消费}Overridepublic boolean onSingleTapConfirmed(MotionEvent e) {// 单击事件确认时触发return true;}Overridepublic boolean onDoubleTap(MotionEvent e) {// 双击事件时触发return true;}Overridepublic void onLongPress(MotionEvent e) {// 长按事件时触发}Overridepublic boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {// 滚动事件时触发return true;}// 其他手势事件处理方法...} }二、ScaleGestureDetector 1. 简介 用于检测缩放手势即双指捏合或者扩张的手势。它提供了 onScale() 和 onScaleBegin() 等回调方法来处理缩放手势的开始、进行中和结束时的事件。 2. SimpleOnGestureListener 内部类 ScaleGestureDetector.SimpleOnGestureListener 用于处理手势事件的辅助类它包含了一系列回调方法用于处理不同类型的双指手势事件。下面是对每个回调方法的简要介绍 onScale(ScaleGestureDetector detector): 当缩放手势进行中时调用。这个方法会在缩放手势进行过程中持续调用每次缩放都会触发。参数 detector 提供了有关缩放手势的信息如当前的缩放因子等。 onScaleBegin(ScaleGestureDetector detector): 当缩放手势开始时调用。这个方法在缩放手势的第一次触发时调用可以用来初始化缩放相关的状态。参数 detector 提供了有关缩放手势的信息。 onScaleEnd(ScaleGestureDetector detector): 当缩放手势结束时调用。这个方法在缩放手势结束后调用可以用来清理缩放相关的状态。参数 detector 提供了有关缩放手势的信息。 3. 示例 import android.content.Context; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.ScaleGestureDetector; import android.view.View;public class MyScaleView extends View {private ScaleGestureDetector scaleGestureDetector;private float scaleFactor 1.0f;public MyScaleView(Context context, AttributeSet attrs) {super(context, attrs);scaleGestureDetector new ScaleGestureDetector(context, new ScaleListener());}Overridepublic boolean onTouchEvent(MotionEvent event) {// 将触摸事件传递给 ScaleGestureDetectorscaleGestureDetector.onTouchEvent(event);return true;}Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);// 在画布上绘制内容并根据 scaleFactor 进行缩放canvas.scale(scaleFactor, scaleFactor, getWidth() / 2f, getHeight() / 2f);// 绘制内容...}private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener {Overridepublic boolean onScale(ScaleGestureDetector detector) {// 缩放因子的变化scaleFactor * detector.getScaleFactor();// 限制缩放因子的范围可选scaleFactor Math.max(0.1f, Math.min(scaleFactor, 5.0f));// 重绘 Viewinvalidate();return true;}} }三、自定义一个可拖拽和拉伸的ImageView 1. 思路整理 首先我们可以直接继承 ImageView并通过 Matrix 来控制图片的移动和拉伸。其次使用 GestureDetector 监听移动的相关事件使用 ScaleGestureDetector 监听拉伸的相关事件。最后我们可能需要控制图片最大和最小缩放的比例。实际应用中还会考虑一些图片边界、双击放大、动画等可根据需求自行添加。 2. 示例 import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Matrix; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.view.GestureDetector; import android.view.MotionEvent; import android.view.ScaleGestureDetector;import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.widget.AppCompatImageView;public class DragZoomImageView extends AppCompatImageView {private static final int NONE 0;private static final int DRAG 1;private static final int ZOOM 2;private int mMode NONE;private Matrix mFinalMatrix new Matrix();private Matrix mSavedMatrix new Matrix();// 图像以FitXY显示时使用的Scale大小private float mOriginScale 1.0f;// 图像的最小、最大缩放比例private float mMinScale 0.5f;private float mMaxScale 5.0f;private float mCurrentScale 1.0f;private Bitmap mBitmap;private GestureDetector mGestureDetector;private ScaleGestureDetector mScaleGestureDetector;public DragZoomImageView(NonNull Context context) {super(context);init();}public DragZoomImageView(NonNull Context context, Nullable AttributeSet attrs) {super(context, attrs);init();}public DragZoomImageView(NonNull Context context, Nullable AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);init();}private void init() {setScaleType(ScaleType.MATRIX);mGestureDetector new GestureDetector(getContext(), new GestureListener());mScaleGestureDetector new ScaleGestureDetector(getContext(), new ScaleListener());}Overrideprotected void onSizeChanged(int w, int h, int oldw, int oldh) {super.onSizeChanged(w, h, oldw, oldh);Drawable drawable getDrawable();Bitmap bitmap drawableToBitmap(drawable);if (bitmap ! null) {Matrix matrix getFitCenterMatrix(bitmap.getWidth(), bitmap.getHeight(), w, h);setImageMatrix(matrix);mOriginScale getMatrixScaleX(matrix);mBitmap bitmap;}}Overridepublic void setImageMatrix(Matrix matrix) {super.setImageMatrix(matrix);mFinalMatrix.set(matrix);}Overridepublic void setImageBitmap(Bitmap bm) {if (bm null) {return;}super.setImageBitmap(bm);Matrix matrix getFitCenterMatrix(bm.getWidth(), bm.getHeight(), getWidth(), getHeight());setImageMatrix(matrix);mOriginScale getMatrixScaleX(matrix);mBitmap bm;}Overridepublic boolean onTouchEvent(MotionEvent event) {if (mBitmap null) {return false;}switch (event.getAction() MotionEvent.ACTION_MASK) {case MotionEvent.ACTION_DOWN: // 单指mMode DRAG;break;case MotionEvent.ACTION_POINTER_DOWN: // 多指mMode ZOOM;break;}if (mMode DRAG) {mGestureDetector.onTouchEvent(event);}if (mMode ZOOM) {mScaleGestureDetector.onTouchEvent(event);}return true;}public void handleScale(float scale) {handleScale(scale, getWidth() / 2, getHeight() / 2);}public void handleScale(float scale, float px, float py) {if (scale mMinScale) {scale mMinScale;}if (scale mMaxScale) {scale mMaxScale;}if (mCurrentScale scale) {return;}mCurrentScale scale; // record scalefloat newScale scale * mOriginScale;float oldScale getMatrixScaleX(mFinalMatrix);float postScale newScale / oldScale;mFinalMatrix.postScale(postScale, postScale, px, py);super.setImageMatrix(mFinalMatrix);}private float getMatrixScaleX(Matrix matrix) {float[] values new float[9];matrix.getValues(values);return values[Matrix.MSCALE_X];}private Matrix getFitCenterMatrix(int bitmapWidth, int bitmapHeight, int viewWidth, int viewHeight) {Matrix matrix new Matrix();matrix.reset();float scale;float dx;float dy;scale Math.min((float) viewWidth / (float) bitmapWidth, (float) viewHeight / (float) bitmapHeight);dx Math.round((viewWidth - bitmapWidth * scale) * 0.5f);dy Math.round((viewHeight - bitmapHeight * scale) * 0.5f);matrix.setScale(scale, scale);matrix.postTranslate(dx, dy);return matrix;}private Bitmap drawableToBitmap(Drawable drawable) {if (drawable null) {return null;}if (drawable instanceof BitmapDrawable) {return ((BitmapDrawable) drawable).getBitmap();} else if (drawable instanceof ColorDrawable) {// 如果 Drawable 是 ColorDrawable则创建一个相同大小的 BitmapColorDrawable colorDrawable (ColorDrawable) drawable;int width colorDrawable.getIntrinsicWidth();int height colorDrawable.getIntrinsicHeight();Bitmap bitmap Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);Canvas canvas new Canvas(bitmap);colorDrawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());colorDrawable.draw(canvas);return bitmap;} else {// 如果 Drawable 不是 BitmapDrawable 或 ColorDrawable则返回空return null;}}private class GestureListener extends GestureDetector.SimpleOnGestureListener {Overridepublic boolean onDown(MotionEvent e) {mSavedMatrix.set(mFinalMatrix);return super.onDown(e);}Overridepublic boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {Matrix matrix new Matrix(mSavedMatrix);float dx e2.getX() - e1.getX();float dy e2.getY() - e1.getY();matrix.postTranslate(dx, dy);setImageMatrix(matrix);return true;}}private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener {float px;float py;Overridepublic boolean onScaleBegin(ScaleGestureDetector detector) {px detector.getFocusX();py detector.getFocusY();return true;}Overridepublic boolean onScale(ScaleGestureDetector detector) {float scale detector.getScaleFactor() * mCurrentScale;handleScale(scale, px, py);return true;}} }
http://www.zqtcl.cn/news/447409/

相关文章:

  • 云南哪几个建网站公司九江做网站哪家好
  • 时尚网站模板代码网站模板炫酷
  • 股票网站怎么做动态表格live2d看板娘wordpress
  • 班级网站建设开题报告企业创新平台建设
  • 网站建设有什么要求建设电子商务网站的步骤
  • 百度推广和哪些网站有合作专业网站开发多少钱
  • 相城区住房建设局网站做网站开发电脑配置
  • 成都网站建设制作photoshop网页制作视频教程
  • 深圳网站做的好的公司广州外贸营销网站建设公司
  • 网站你懂我意思正能量晚上不用下载直接进入微信公众号免费模板素材网站
  • 网站设计模板之家南宁seo外包平台
  • 免费舆情网站遵义市双控体系建设网站
  • 企业做网站得多少钱wordpress get_posts
  • 轻淘客网站怎么做申请个人网址
  • 新的网站的建设步骤购物网站首页源码
  • 龙岗网站建设费用明细中山 灯饰 骏域网站建设专家
  • 做catalog的免费网站网站开发一般采用什么框架
  • 网站建设海淀区网站特殊字体
  • 电子商务网站建设情况国风网页设计欣赏
  • 海拉尔网站建设+网站设计徐州模板建站定制网站
  • 做网站诱导充值犯法吗折叠分类目录模板wordpress
  • 企业网站建设的平台怎样建网站买东西
  • 免费推广工具有哪些上海优化营商环境
  • 模板网站怎么修改下载的字体如何安装到wordpress
  • 中国建设资格注册中心网站杭州市建设信用网官网
  • 国外网站搭建平台wordpress+行间距插件
  • 做网站买那种服务器wordpress商店插件
  • dw网站开发流程做影视网站怎么
  • 建好的网站在哪里免费的app软件大全
  • 建设银行信用卡境外网站盗刷电子商务专业是学什么的