双缓冲 android,Android 的 SurfaceView 双缓冲应用

该代码段展示了在Android中如何通过多线程加载和显示图像。首先从资源中获取图像ID,然后使用BitmapFactory解码资源得到Bitmap对象,并获取图像的宽度和高度。接下来,创建两个线程,一个用于加载图像,另一个用于在SurfaceView上绘制图像,实现了图像的高效加载和滚动显示。
摘要由CSDN通过智能技术生成

075 int index = 0;本文引用地址:http://www.eepw.com.cn/article/201610/305442.htm

076 try {

077 index = field.getInt(R.drawable.class);

078 } catch (IllegalArgumentException e) {

079 // TODO Auto-generated catch block

080 e.printStackTrace();

081 } catch (IllegalAccessException e) {

082 // TODO Auto-generated catch block

083 e.printStackTrace();

084 }

085 // 保存图片ID

086 imgList.add(index);

087 }

088 }

089 // 取得图像大小

090 Bitmap bmImg = BitmapFactory.decodeResource(getResources(),

091 imgList.get(0));

092 imgWidth = bmImg.getWidth();

093 imgHeight = bmImg.getHeight();

094 }

095

096 @Override

097 public void surfaceDestroyed(SurfaceHolder holder) {

098 Log.i(Surface:, Destroy);

099

100 }

101

102 }

103

104 /**

105 * 读取并显示图片的线程

106 */

107 class Load_DrawImage extends Thread {

108 int x, y;

109 int imgIndex = 0;

110

111 public Load_DrawImage(int x, int y) {

112 this.x = x;

113 this.y = y;

114 }

115

116 public void run() {

117 while (true) {

118 Canvas c = sfh.lockCanvas(new Rect(this.x, this.y, this.x

119 + imgWidth, this.y + imgHeight));

120 Bitmap bmImg = BitmapFactory.decodeResource(getResources(),

121 imgList.get(imgIndex));

122 c.drawBitmap(bmImg, this.x, this.y, new Paint());

123 imgIndex++;

124 if (imgIndex == imgList.size())

125 imgIndex = 0;

126

127 sfh.unlockCanvasAndPost(c);// 更新屏幕显示内容

128 }

129 }

130 };

131

132 /**

133 * 只负责绘图的线程

134 */

135 class DrawImage extends Thread {

136 int x, y;

137

138 public DrawImage(int x, int y) {

139 this.x = x;

140 this.y = y;

141 }

142

143 public void run() {

144 while (true) {

145 if (bitmap != null) {//如果图像有效

146 Canvas c = sfh.lockCanvas(new Rect(this.x, this.y, this.x

147 + imgWidth, this.y + imgHeight));

148

149 c.drawBitmap(bitmap, this.x, this.y, new Paint());

150

151 sfh.unlockCanvasAndPost(c);// 更新屏幕显示内容

152 }

153 }

154 }

155 };

156

157 /**

158 * 只负责读取图片的线程

159 */

160 class LoadImage extends Thread {

161 int imgIndex = 0;

162

163 public void run() {

164 while (true) {

165 bitmap = BitmapFactory.decodeResource(getResources(),

166 imgList.get(imgIndex));

167 imgIndex++;

168 if (imgIndex == imgList.size())//如果到尽头则重新读取

169 imgIndex = 0;

170 }

171 }

172 };

173}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值