继承SurfaceView实现图片自动播放
2011-12-11 16:22
393 查看
代码如下,多多交流。
package com.farben.ams.widget; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.util.List; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.Rect; import android.graphics.Paint.Style; import android.media.ThumbnailUtils; import android.provider.MediaStore.Images.Thumbnails; import android.util.Log; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.ViewGroup.LayoutParams; /** * 图片浏览器 * @author Keynes Cao * @create 2011-12-5 上午9:24:23 * @package com.farben.ams.widget */ public class ImageSurfaceView extends SurfaceView implements SurfaceHolder.Callback,Runnable{ //图片集 private List<String> mList = null; //运行状态 public boolean mLoop = false; //获取画布 private SurfaceHolder mSurfaceHolder = null; //图片索引 private int mCount = 0; //时间间隔 private long speed = 1000; private static Matrix matrix = new Matrix(); /** * @param context * <see>容器</see> * @param list * <see>图片地址列表 </see> * @param rate * <see>图片切换时间 单位:毫秒</see> * */ public ImageSurfaceView(Context context,List<String>list,long speed) { super(context); if(list!=null && list.size()>0){ this.mList = list; this.speed = speed; } mSurfaceHolder = getHolder(); mSurfaceHolder.addCallback(this); mLoop = true;//开始画图 } public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {} //图像创建时 public void surfaceCreated(SurfaceHolder holder) { if(mList!=null && mList.size()>0){ if(mList.size() == 1){ Log.d("ImageSurfaceView"," Only one picture"); drawImg(); }else{ Log.d("ImageSurfaceView"," run Thread."); new Thread(this).start(); } } } //视图销毁时 public void surfaceDestroyed(SurfaceHolder holder) { mLoop = false; } //画图方法 private void drawImg(){ Canvas canvas = mSurfaceHolder.lockCanvas(); if(canvas == null || mSurfaceHolder == null){ return; } if(mCount >= mList.size()){ mCount = 0; } Bitmap bitmap = null; try{ String path = mList.get(mCount++); bitmap = BitmapFactory.decodeStream(new FileInputStream(path)); if(bitmap!=null){ //画布宽和高 int height = getHeight(); int width = getWidth(); //生成合适的图像 bitmap = getReduceBitmap(bitmap,width,height); Paint paint = new Paint(); paint.setAntiAlias(true); paint.setStyle(Style.FILL); //清屏 paint.setColor(Color.BLACK); canvas.drawRect(new Rect(0, 0, getWidth(),getHeight()), paint); //Log.d("ImageSurfaceView_IMG",path); //画图 canvas.drawBitmap(bitmap, matrix, paint); } //解锁显示 mSurfaceHolder.unlockCanvasAndPost(canvas); }catch(Exception ex){ Log.e("ImageSurfaceView",ex.getMessage()); return; }finally{ //资源回收 if(bitmap!=null){ bitmap.recycle(); } } } //刷新图片 public void run() { while(mLoop){ synchronized (mSurfaceHolder) { drawImg(); } try { Thread.sleep(speed); } catch (InterruptedException e) { Log.e("ImageSurfaceView_Thread",e.getMessage()); } } mList = null;//消毁 } //缩放图片 private Bitmap getReduceBitmap(Bitmap bitmap ,int w,int h){ int width = bitmap.getWidth(); int hight = bitmap.getHeight(); Matrix matrix = new Matrix(); float wScake = ((float)w/width); float hScake = ((float)h/hight); matrix.postScale(wScake, hScake); return Bitmap.createBitmap(bitmap, 0,0,width,hight,matrix,true); } }
相关文章推荐
- 使用ViewPager实现图片自动播放效果,并可左右滑动
- Android 使用ViewPager实现图片左右循环滑动自动播放
- 继承SurfaceView实现视频播放
- 用SurfaceView,Timer以及Handler实现的一个带有音乐和文字的电子相册,可以自动播放~
- Android - 图片的处理,触摸监听事件,音乐播放,SoundPool,VideoView,视频播放,SurfaceView,拍照录像,传感器
- viewflow实现类似淘宝,网易新闻的横幅banner,可循环自动播放
- UIScrollView实现自动轮播,可用于广告图片轮播
- Android自定义View实现自动无限轮播,点击图片进入详情页
- Android移动开发-使用MediaPlayer和SurfaceView播放视频的实现
- UIScrollView 实现广告栏的无限轮播(可设置自动播放时间)
- ASP.NET前台页面实现图片自动播放
- android 通过Camera和Surfaceview实现照相 图片预览 保存图片到本地 手动聚焦 FaceDetectionListener实现人脸识别
- ViewFlipper的使用---自动播放(轮播图)的实现以及多个view进行切换
- mediaplayer+surfaceview实现视频播放以及全屏窗口切换
- Android实现图片宽度100%ImageView宽度且高度按比例自动伸缩
- ViewPager实现QQ主界面,ViewFlipper实现某些新闻应用,自动播放,很流畅
- 自定义类继承ImageView 实现多点图片触碰的拖动和缩放
- Android图片滚动,加入自动播放功能,使用自定义属性实现,霸气十足!
- 【iOS系列】-UIScrollView的介绍及结合UIPageControl实现图片播放的实例
- Android - SurfaceView + MediaPlayer实现分段视频无缝播放