本文实例为大家分享了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仿微博加载长图滚动查看效果所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)