Android仿微博加载长图滚动查看效果

Android仿微博加载长图滚动查看效果,第1张

概述本文实例为大家分享了Android加载长图片的具体代码,供大家参考,具体内容如下

本文实例为大家分享了AndroID加载长图片的具体代码,供大家参考,具体内容如下

解决步骤

1.将图片缩放到与控件等宽
2.判断缩放后的图片高度,如果高度大于控件高度较多(这里设置的是1.5倍),认定为长图,可滑动查看图片
                     |-如果高度小于控件高度的1.5倍,以控件高度为基准,重新缩放图片

package org.wandcf_ces.fairproject.Widgets;  import androID.annotation.TargetAPI; import androID.content.Context; import androID.graphics.Bitmap; import androID.graphics.Canvas; import androID.graphics.color; import androID.graphics.Matrix; import androID.graphics.Paint; import androID.graphics.Rect; import androID.graphics.RectF; import androID.os.Build; import androID.support.annotation.Nullable; import androID.util.AttributeSet; import androID.vIEw.MotionEvent; import androID.vIEw.VIEw;  /**  * Created by sunrui on 2017/3/8.  * 加载长图片  * 解决步骤  * 1.将图片缩放到与控件等宽  * 2.判断缩放后的图片高度,如果高度大于控件高度较多(这里设置的是1.5倍),认定为长图,可滑动查看图片  *           |-如果高度小于控件高度的1.5倍,以控件高度为基准,重新缩放图片  *  */ public class LongImageVIEw extends VIEw {    private int wIDth,height;    //需要绘制的Bitmap   private Bitmap bitmap;    /**    * 需要绘制的图片的区域    */   private Rect srcRect;    /**    * 绘制的区域    */   private RectF dstRectF;    /**    * 画笔    */   private Paint paint;     /**    * 是否需要滑动    */   private boolean isNeedSlIDe;    /**    * 已经滑动过的距离    */   private float slIDeLength;     /**    * 绘制的Bitmap    */   private Bitmap drawBitmap;    {     srcRect = new Rect();     dstRectF = new RectF();     paint = new Paint();     paint.setAntiAlias(true);     paint.setcolor(color.BLACK);     paint.setstrokeWIDth(1.0f);   }    public LongImageVIEw(Context context) {     super(context);   }    public LongImageVIEw(Context context,@Nullable AttributeSet attrs) {     super(context,attrs);   }    public LongImageVIEw(Context context,@Nullable AttributeSet attrs,int defStyleAttr) {     super(context,attrs,defStyleAttr);   }    @TargetAPI(Build.VERSION_CODES.LolliPOP)   public LongImageVIEw(Context context,int defStyleAttr,int defStyleRes) {     super(context,defStyleAttr,defStyleRes);   }    /**    * 设置Bitmap    *    * @param bitmap    *     需要绘制的Bitmap    */   public voID setBitmap(Bitmap bitmap) {     this.bitmap = bitmap;   }    @OverrIDe   protected voID onMeasure(int wIDthMeasureSpec,int heightmeasureSpec) {     int specsize = MeasureSpec.getSize(wIDthMeasureSpec);     wIDth = getpaddingleft() + getpaddingRight() + specsize;     specsize = MeasureSpec.getSize(heightmeasureSpec);     height = getpaddingtop() + getpaddingBottom() + specsize;     if (drawBitmap == null) {       drawBitmap = resizeImage(bitmap,wIDth);       if (drawBitmap.getHeight() > 1.5 * height) {         //需要滑动         setNeedSlIDe(true);       } else {         //不需要滑动         setNeedSlIDe(false);         srcRect.left = 0;         srcRect.top = 0;         srcRect.right = drawBitmap.getWIDth();         srcRect.bottom = drawBitmap.getHeight();         if (drawBitmap.getHeight() > height) {           drawBitmap = resizeImageH(drawBitmap,height - 20);         } else {           float space = (height - drawBitmap.getHeight());           dstRectF.left = 0;           dstRectF.top = space;           dstRectF.right = wIDth;           dstRectF.bottom = height - space;         }       }     }     setMeasuredDimension(wIDth,height);   }    @OverrIDe   protected voID onDraw(Canvas canvas) {     canvas.drawBitmap(drawBitmap,(wIDth - drawBitmap.getWIDth()) / 2,slIDeLength,paint);   }    /**    * 设置是否需要滑动    *    * @param needSlIDe    *     true or false    */   public voID setNeedSlIDe(boolean needSlIDe) {     isNeedSlIDe = needSlIDe;   }    /**    * 触摸 *** 作的坐标    */   private float lastX;   private float lastY;    @OverrIDe   public boolean ontouchEvent(MotionEvent event) {     if (!isNeedSlIDe) {       return super.ontouchEvent(event);     }     int action = event.getAction();     switch (action) {       case MotionEvent.ACTION_DOWN:         //按下         lastX = event.getX();         lastY = event.getY();         break;       case MotionEvent.ACTION_MOVE:         float moveX = event.getX();         if (moveX - lastX > 50) {           //判断为左右滑动           return super.ontouchEvent(event);         }         float moveY = event.getY();         float distance = moveY - lastY;         lastY = moveY;         slIDeLength += distance;         if (slIDeLength >= 0) {           slIDeLength = 0;         }         if (slIDeLength <= (-1) * (drawBitmap.getHeight() - height)) {           slIDeLength = (-1) * (drawBitmap.getHeight() - height);         }         postInvalIDate();         break;       default:         break;     }     return true;   }    public Bitmap resizeImage(Bitmap bitmap,int w) {     int wIDth = bitmap.getWIDth();     int height = bitmap.getHeight();     float scaleWIDth = ((float) w) / wIDth;     Matrix matrix = new Matrix();     matrix.postscale(scaleWIDth,scaleWIDth);     return Bitmap.createBitmap(bitmap,wIDth,height,matrix,true);   }    public Bitmap resizeImageH(Bitmap bitmap,int h) {     int wIDth = bitmap.getWIDth();     int height = bitmap.getHeight();     float scaleWIDth = ((float) h) / height;     Matrix matrix = new Matrix();     matrix.postscale(scaleWIDth,true);   }  } 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

总结

以上是内存溢出为你收集整理的Android仿微博加载长图滚动查看效果全部内容,希望文章能够帮你解决Android仿微博加载长图滚动查看效果所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/web/1143375.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存