搜索网站 模板可以用手机制作app的软件
搜索网站 模板,可以用手机制作app的软件,seo入门教程视频,推销网站的方法在系统的相册中,观看相片就可以用多个手指进行缩放.要实现这个功能,只需要这几步:1.新建项目,在项目中新建一个ZoomImage.javapublic class ZoomImageView extends View {//初始化状态常量public static final int STATUS_INIT1;//图片放大状态常量public static final int STA…在系统的相册中,观看相片就可以用多个手指进行缩放.要实现这个功能,只需要这几步:1.新建项目,在项目中新建一个ZoomImage.java public class ZoomImageView extends View { //初始化状态常量 public static final int STATUS_INIT1; //图片放大状态常量 public static final int STATUS_ZOOM_OUT2; //图片缩小状态常量 public static final int STATUS_ZOOM_IN3; //图片拖动状态的常量 public static final int STATUS_MOVE4; //对图片进行移动和缩放的矩阵 private Matrix matrixnew Matrix(); //需要处理的Bitmap对象 private Bitmap sourceBitmap; //记录当前的操作状态 private int currentStatus; //ZoomImageView的宽度 private int width; //ZoomImageView的高度 private int height; //记录两指同时放在屏幕上时,中心点的横坐标 private float centerPointX; //记录两指同时放在屏幕上时,中心点的纵坐标 private float centerPointY; //记录当前图片的宽度 private float currentBitmapWidth; //记录当前图片的高度 private float currentBitmapHeight; //记录上次手指移动时的横坐标 private float lastXMove-1; //记录上次手指移动时的纵坐标 private float lastYMove-1; //记录手指在横坐标上的距离 private float moveDistanceX; //记录手指在纵坐标上的距离 private float moveDistanceY; //记录图片在矩阵上横向偏移值 private float totalTranslateX; //记录图片在矩阵上纵向偏移值 private float totalTranslateY; //记录图片在矩阵上总缩放比例 private float totalRatio; //记录手指移动的距离造成的缩放比例 private float scaledRatio; //记录图片初始化时的缩放比例 private float initRatio; //记录上次手指之间的距离 private double lastFingerDis; //初始状态 设置当前操作状态为STATUS_INIT public ZoomImageView(Context context, AttributeSet attrs) { super(context, attrs); currentStatusSTATUS_INIT; } //将待展示的图片设置进来 public void setImageBitmap(Bitmap bitmap){ sourceBitmapbitmap; invalidate(); } Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { super.onLayout(changed, left, top, right, bottom); if(changed){ widthgetWidth(); heightgetHeight(); } } Override public boolean onTouchEvent(MotionEvent event) { switch (event.getActionMasked()) { case MotionEvent.ACTION_POINTER_DOWN: if(event.getPointerCount()2){ lastFingerDisdistanceBetweenFingers(event); //两指间按下的距离 } break; case MotionEvent.ACTION_MOVE: if(event.getPointerCount()1){ //如果只有一个手指在屏幕上 则为拖动模式 float xMoveevent.getX(); float yMoveevent.getY(); if(lastXMove-1lastYMove-1){ lastXMovexMove; lastYMoveyMove; } currentStatusSTATUS_MOVE; moveDistanceXxMove-lastXMove; moveDistanceYyMove-lastYMove; //进行边界检查 不允许拖出边界 if(totalTranslateXmoveDistanceX0){ moveDistanceX0; } else if(width-(totalTranslateXmoveDistanceX)currentBitmapWidth){ moveDistanceX0; } if(totalTranslateYmoveDistanceY0){ moveDistanceY0; } else if(height-(totalTranslateYmoveDistanceY)currentBitmapHeight){ moveDistanceY0; } //调用onDraw()方法绘制图片 invalidate(); lastXMovexMove; lastYMoveyMove; } else if(event.getPointerCount()2){ //有两个手指在屏幕上移动 为缩放状态 centerPointBetweenFingers(event); double fingerDisdistanceBetweenFingers(event); if(fingerDislastFingerDis){ currentStatusSTATUS_ZOOM_OUT; } else{ currentStatusSTATUS_ZOOM_IN; } //进行缩放倍数检查 if((currentStatusSTATUS_ZOOM_OUTtotalRatio4*initRatio)||(currentStatusSTATUS_ZOOM_INtotalRatioinitRatio)){ scaledRatio(float) (fingerDis/lastFingerDis); //需要缩放的比例 totalRatiototalRatio*scaledRatio; if(totalRatio4*initRatio){ totalRatio4*initRatio; } else if(totalRatioinitRatio){ totalRatioinitRatio; } //调用onDraw invalidate(); lastFingerDisfingerDis; } } break; case MotionEvent.ACTION_POINTER_UP: if(event.getPointerCount()2){ lastXMove-1; lastYMove-1; } break; case MotionEvent.ACTION_UP: lastXMove-1; lastYMove-1; break; default: break; } return true; } Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); switch (currentStatus) { case STATUS_ZOOM_OUT: case STATUS_ZOOM_IN: zoom(canvas); break; case STATUS_MOVE: move(canvas); break; case STATUS_INIT: initBitmap(canvas); break; default: canvas.drawBitmap(sourceBitmap, matrix, null); break; } } //初始化显示图片 private void initBitmap(Canvas canvas){ if(sourceBitmap!null){ matrix.reset(); int bitmapWidthsourceBitmap.getWidth(); int bitmapHeightsourceBitmap.getHeight(); if(bitmapWidthwidth||bitmapHeightheight){//如果图片的宽度或高度有大于屏幕宽高 if(bitmapWidth-widthbitmapHeight-height){ //判断这张图片 是宽度长 还是高度长 如果是宽度长,则按宽度的那边进行压缩 高度也等比例压缩 float radiowidth/(bitmapWidth*1.0f); //需要压缩的比例 matrix.postScale(radio,radio); //缩放矩阵比例 float translateY(height-(bitmapHeight*radio))/2f; //因为是按宽度进行压缩 所以宽度应该是占满全屏 这时候还应该将图片Y轴向下移动 //在纵坐标上进行偏移 以保证图片居中显示 matrix.postTranslate(0, translateY); totalTranslateYtranslateY; totalRatioinitRatioradio; } else{ //当图片高度大于屏幕高度时 float radioheight/(bitmapHeight*1.0f); matrix.postScale(radio, radio); float translateX(width-(bitmapWidth*radio))/2f; //在横坐标上进行偏移 matrix.postTranslate(translateX, 0);//平移 totalTranslateXtranslateX; totalRatioinitRatioradio; } } else{ //当图片的宽度与高度都小于屏幕宽高时,让图片居中显示 float translateX(width-sourceBitmap.getWidth())/2f; float translateY(height-sourceBitmap.getHeight())/2f; matrix.postTranslate(translateX, translateY); totalTranslateXtranslateX; totalTranslateYtranslateY; totalRatioinitRatio1f; currentBitmapHeightbitmapHeight; currentBitmapWidthbitmapWidth; } canvas.drawBitmap(sourceBitmap, matrix, null); } } //对图片进行缩放处理 private void zoom(Canvas canvas){ matrix.reset(); //将图片按照比例缩放 matrix.postScale(totalRatio, totalRatio); float scaledWidthsourceBitmap.getWidth()*totalRatio; float scaledHeightsourceBitmap.getHeight()*totalRatio; float translateX0f; float translateY0f; //如果当前图片宽度小于屏幕宽度 则按屏幕中心点 进行水平缩放,否则按两指中线点的横坐标进行缩放 if(currentBitmapWidthwidth){ translateX(width-scaledWidth)/2f; } else{ translateXtotalTranslateX*scaledRatiocenterPointX*(1-scaledRatio); //进入边界检查 ,保证图片缩放后水平方向不会偏移屏幕 if(translateX0){ translateX0; } else if(width-translateXscaledWidth){ translateXwidth-scaledWidth; } } if(currentBitmapHeightheight){ translateY(height-scaledHeight)/2f; } else{ translateYtotalTranslateY*scaledRatiocenterPointY*(1-scaledRatio); //进行边界检查 if(translateY0){ translateY0; } else if(height-translateYscaledHeight){ translateYheight-scaledHeight; } } //缩放后对图片进行偏移 保证缩放后中心点位置不变 matrix.postTranslate(translateX, translateY); totalTranslateXtranslateX; totalTranslateYtranslateY; currentBitmapWidthscaledWidth; currentBitmapHeightscaledHeight; canvas.drawBitmap(sourceBitmap, matrix, null); } //对图片进行平移处理 private void move(Canvas canvas){ matrix.reset(); //根据手指移动的距离计算总偏移量 float translateXtotalTranslateXmoveDistanceX; float translateYtotalTranslateYmoveDistanceY; //按照已有的缩放比例对图片缩放 matrix.postScale(totalRatio, totalRatio); //根据移动距离进行偏移 matrix.postTranslate(translateX, translateY); totalTranslateXtranslateX; totalTranslateYtranslateY; canvas.drawBitmap(sourceBitmap, matrix, null); } //计算两个手指的距离 private double distanceBetweenFingers(MotionEvent event){ float disXMath.abs(event.getX(0)-event.getX(1)); float disYMath.abs(event.getY(0)-event.getY(1)); return Math.sqrt(disX*disXdisY*disY); } //计算两个手指之间中心点的坐标 private void centerPointBetweenFingers(MotionEvent event){ float xPoint0event.getX(0); float yPoint0event.getY(0); float xPoint1event.getX(1); float yPoint1event.getY(1); centerPointX(xPoint0xPoint1)/2; centerPointY(yPoint0yPoint1)/2; } }2.打开activity_main.xml com.example.bitmaptest.ZoomImageView xmlns:androidhttp://schemas.android.com/apk/res/android xmlns:toolshttp://schemas.android.com/tools android:layout_widthmatch_parent android:layout_heightmatch_parent android:idid/zoom_image tools:contextcom.example.bitmaptest.MainActivity /com.example.bitmaptest.ZoomImageView 3.打开MainActivity.java public class MainActivity extends ActionBarActivity { private Bitmap bitmap; Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ZoomImageView zoomImage(ZoomImageView) findViewById(R.id.zoom_image); bitmapBitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); if(bitmap!null){ zoomImage.setImageBitmap(bitmap); } } } 来自为知笔记(Wiz)转载于:https://www.cnblogs.com/aibuli/p/76d1cd14cb1dcf018198fba314bb3509.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/87787.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!