android实现多图片放大缩小的切换
来源:互联网 发布:淘宝客服介入会成功吗 编辑:程序博客网 时间:2024/05/18 13:45
前天在网上看到了http://v.qq.com/vplus/56c7ec6c231bdbafd198c58fb86eb4dc 作者仿QQ的代码,看了一下感觉很受启发。正好,单位在做引导页的时候,要用到类似的东西,只不过是放大缩小的样子。好了,下面我们来看一下代码。
package com.example.cg.scaleimageview.Customs;import android.content.Context;import android.content.res.TypedArray;import android.graphics.Canvas;import android.graphics.drawable.Drawable;import android.os.Handler;import android.os.Message;import android.util.AttributeSet;import android.widget.ImageView;import com.example.cg.scaleimageview.R;/** * 自定义控件,根据传入的图片组,对图片进行从小到大的显示 * 作者:cg * 时间:2017/4/24 0024 上午 10:30 */public class ScaleImageView extends ImageView { private Drawable mDrawable; private Handler mHandler; private int[] imgSrc = new int[]{R.mipmap.mm1}; private boolean isEnlarge = true; private float scaleNum = 1.0f; //图片初始放大的倍数 private float scaleMaxNum = 1.2f; //图片最大会被放大多少,默认是1.2倍 private float scaleValue = 0.002f; //图片每次放大缩小的倍数 private int num = 1; //当前显示到第几个图 public ScaleImageView(Context context) { this(context,null); } public ScaleImageView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public ScaleImageView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); TypedArray array = context.getTheme().obtainStyledAttributes(attrs,R.styleable.ScaleImageView,defStyleAttr,0); int n = array.getIndexCount(); for(int i=0;i<n;i++) { int arr = array.getIndex(i); switch (arr) { case R.styleable.ScaleImageView_isEnlarge: isEnlarge = array.getBoolean(arr,true); break; case R.styleable.ScaleImageView_scaleMaxNum: scaleMaxNum = array.getFloat(arr,1.2f); break; case R.styleable.ScaleImageView_scaleValue: scaleValue = array.getFloat(arr,0.002f); break; } } array.recycle(); if(!isEnlarge) { scaleNum = scaleMaxNum; } //初始化第一个图 mDrawable=getDrawable(); mHandler=new ScaleImageView.MoveHandler(); mHandler.sendEmptyMessageDelayed(1, 220L); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.scale(scaleNum,scaleNum,getMeasuredWidth()/2,getMeasuredHeight()/2); mDrawable.draw(canvas); } @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { super.onLayout(changed, left, top, right, bottom); if(isEnlarge) { mDrawable.setBounds(0, 0, getMeasuredWidth(), getMeasuredHeight()); }else{ int mCanvasWBgSize = Math.round(getMeasuredWidth() * scaleMaxNum); int mCanvashBgSize = Math.round(getMeasuredHeight() * scaleMaxNum); int leftRight = (mCanvasWBgSize - getMeasuredWidth())/2; int topBottom = (mCanvashBgSize - getMeasuredHeight())/2; mDrawable.setBounds(-leftRight,-topBottom,getMeasuredWidth() + leftRight,getMeasuredHeight() + topBottom); } } private class MoveHandler extends Handler{ @Override public void handleMessage(Message msg) { super.handleMessage(msg); /** * 此处进行判断,如果小于最大倍数,就不断放大,如果大于了最大或等于最大倍数,就进行换图 */ if(isEnlarge) { if (scaleNum < scaleMaxNum) { scaleNum += scaleValue; invalidate(); mHandler.sendEmptyMessageDelayed(1, 22); } else { scaleNum = 1.0f; setImageResource(imgSrc[num % 3]); mDrawable = getDrawable(); num++; invalidate(); mHandler.sendEmptyMessageDelayed(1, 22); } }else{ if(scaleNum >= 0.9) { scaleNum -= 0.002; invalidate(); mHandler.sendEmptyMessageDelayed(1, 22); }else { scaleNum = scaleMaxNum; //如果图片只有一个,哪就循环此图片,不用更新 if(imgSrc.length!=1) { setImageResource(imgSrc[num % 3]); mDrawable = getDrawable(); num++; } invalidate(); mHandler.sendEmptyMessageDelayed(1, 22); } } } } /** * 加载图片列表 * @param images 图片列表 */ public void setImages(int[] images) { this.imgSrc = images; invalidate(); }}
代码中我加了详细的注解。都不难理解。
下载
CSDN下载地址
gitHub下载地址
0 0
- android实现多图片放大缩小的切换
- jquery实现图片缩小放大的切换
- Android实现图片放大缩小
- Android实现图片放大缩小
- Android实现图片放大缩小
- Android实现图片放大缩小
- Android实现图片放大缩小
- Android实现图片放大缩小
- android实现对图片的放大缩小旋转等操作
- android中实现图片的放大与缩小
- android点击实现图片放大缩小
- android 自定义imageview实现 图片放大缩小
- Android 图片放大缩小
- android 图片放大缩小
- android 图片放大缩小
- android 放大缩小图片
- 实现图片的点击拖动与多指放大缩小
- JavaScript实现图片的放大、缩小、平移
- 问题汇总——Tomcat启动报错
- 改变多个ul下第一个li的样式
- ubuntu14.04安装TensorFlow
- leetcode:Remove K Digits
- web项目中不适用于java.sql.DriverManager描述的JDBC 4.0 Drivers及以后版本连接数据库是不需要用forName()?
- android实现多图片放大缩小的切换
- bwlabel函数
- DWR实例浅析
- Animation
- java获取不同时间的工具类
- 7.learningAction(行为库)2
- 网络编程-实验1-C与S通信
- Spring 学习2--Spring特殊语义注释类定义bean
- 测试博客