|
篇一:android异步下载网络图片到旋转木马样式中
異步下載圖片到旋轉木馬
一、
需求描述
① 旋轉木馬作為容器,圖片從服務器下載
② 將下載的圖片處理并填充到旋轉木馬中 ③ 採用異步下載并更新到UI使主線程能夠更快運行 二、
描述分析
三、
實現結果
由於Android的版本問題,線程更新不能在OnCreate()方法中調用,必須重新為異步下載開一個線程,也可以用Android的方法加入判斷 if (android.os.Build.VERSION.SDK_INT >= 11) { StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
1
StrictMode.setThreadPolicy(policy);
}
其中android.os.Build.VERSION.SDK_INT表示Android的SDK版本,11是3.0的版
本,這裡採用4.0的版本:
2
四、 方法比較
在Android中只有UI線程才能刷新介面,而其他副線程是不行的,但是如果在主線程中下載圖片,會導致主線程開銷過大容易卡死的現象。所以爲了防止主線程任務過多,可以採用異步下載的方式,一般處理異步下載的方法有: Android異步處理一:使用Thread+Handler實現非UI線程更新UI界面
Android異步處理二:使用AsyncTask異步更新UI界面 Android異步處理三:Handler+Looper+MessageQueue 1>:Thread+Handler處理
每個Android應用程序都運行在一個dalvik虛擬機進程中,進程開始時會啟動一個主線程(MainThread),主線程負責處理和UI相關的事情,因此主線程通常又被叫UI線程,而由於Android採用UI單線程模型,所以只能在主線程中對UI元素進行操作,如果在非UI線程直接對UI線程進行了操作,則會報錯: CalledFromWrongThreadException:only the original thread that created a view hierarchy can touch its views。
Android提供了消息循環的機制,利用這個機制可以實現線程間的通信,對於運算量較大的操作和IO操作,需要開新線程來處理這些繁重的工作,以免堵塞UI線程。 /**這裡重寫handleMessage方法,接收到子線程數據后更新UI**/
private Handler handler=new Handler(){@Override
public void handleMessage(Message msg){ switch(msg.what){ case 1: //关闭
//這裡可以將下載的圖片進行佈局顯示
dialog.dismiss(); break; }} };
採用Http協議獲取圖片
//前台ui线程在显示ProgressDialog,
//后台线程在下载数据,数据下载完毕,关闭进度框 @Override
public void onClick(View view) {switch(view.getId()){case R.id.btnFirst:
3
dialog = ProgressDialog.show(this, "", "下载数据,请稍等 …", true, true); //启动一个后台线程
handler.post(new Runnable(){ @Override
public void run() { //这里下载数据try{
URL url = new URL(params); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); conn.setDoInput(true); conn.connect();
InputStream inputStream=conn.getInputStream(); bitmap = BitmapFactory.decodeStream(inputStream); Message msg=new Message(); msg.what=1;
handler.sendMessage(msg);
} catch (MalformedURLException e1) { e1.printStackTrace();} catch (IOException e) {
// TODO Auto-generated catch block e.printStackTrace();} } });break;
2>AsyncTask異步下載
用Handler+Thread處理異步下載網絡圖片存在一些缺點:
A) 線程的開銷較大,如果每個任務都要創建一個線程,那麼程序的效率就會低很多。
B)線程無法管理,匿名線程創建啟動后就不受程序的控制了,如果有多個請求
發送,就會啟動非常多的線程,系統就不堪重負。 C)UI線程引入了Handler,代碼臃腫。
AsyncTask的特點是任務在主UI線程之外運行,而囘調方法是在主UI線程中,
4
可以避免了使用Handler帶來的麻煩。 AsyncTask的抽象方法:
doInBackground(Params...)執行任務
onPostExecute(Result) 返回任務執行的結果,通常更新UI onProgressUpdate (Progress... values) 進度更新 其中doInBackground(Params)是必須實現的
public class MyASyncTask extends AsyncTask<String, Integer, Bitmap> {
@Override
protected Bitmap doInBackground(String... params) {
Bitmap bitmap = null; try { }
return bitmap;
URL url = new URL(params[0]);
HttpURLConnection con = (HttpURLConnection) con.setDoInput(true); con.connect();
InputStream inputStream = con.getInputStream(); bitmap = BitmapFactory.decodeStream(inputStream); inputStream.close(); e.printStackTrace();
// TODO Auto-generated catch block e.printStackTrace();
url.openConnection();
} catch (MalformedURLException e) { } catch (IOException e) {
然後只需要在UI主線程執行就可以了:
MyASyncTask yncTask=new MyASyncTask(this,frameLayout); yncTask.execute(params); 3> 線程池的幷發下載
幷發下載與異步下載相似,一般只在下載多張圖片的時候才會調用,用List<Bitmap>多個線程下載圖片。
AsyncTask異步下載既能單張下載圖片,又能多張訪問數組下載,所以採用
5
篇二:8旋转木马
第 11册 第 8 课《 旋转木马 》
●教学目标:
1、(知识)尝试用多种材料设计、制作一套新颖别致的木马玩具。
2、(技能)充分利用材料的特性,体验材料的美感和造型活动的乐趣。
3、(情感)提高动手能力,发展创造精神,激发热爱生活的美好情感 ●教学重点:通过观察记忆,了解木马玩具原理结构
●教学难点:尝试用多种材料设计、制作一套新颖别致的木马玩具
●教具准备:(包括是否运用多媒体)
图文资料
●学具准备:彩纸、卡纸、剪刀胶水、综合材料
●教学过程:( 可将教师活动与学生活动分开写,字数长短自行掌握 )
一. 回忆童年
1.同学们,想一想我们在很小的时候都喜欢什么游戏?(学生回答很多,老师引导出旋转木马)
2、回忆一下当时你玩儿的场景,还有木马的样子。
二.木马起源,图文欣赏
我们来看看旋转木马的起源吧.(老师图文讲解木马起源 )
三.探索发现
老师提问:
木马有几 部分组成 ?
木马是怎样旋转起来的 ?说说原理
四、图文演示制作
老师利用多媒体演示制作过程
五、学生制作、老师辅导
1、注意创新使用材料,形象设计要新颖美观,装饰要有创意
2、旋转木马中的木马形象可以用其他形象代替
六、木马转转转
学生说说自己的创作意图,和大家玩一玩
●教学反思:(存在的问题有哪些,究其原因是什么)
●教学资料参考:
(教师可自己动手绘制相关图像,也可以通过其它途径搜集。教学资料可以是图片、学生作业照片、也可以是文字类的,目的是弥补教学知识的不足)
篇三:怎样做旋转木马
首先,用PS新建一个709x500像素的透明背景画布,从边沿拉出一条按比例显示的竖向标尺到画布一半的位置
打开一张需要加工相片,放入画布中,启用变换控件,把照片需要的部分放在画布的左侧
用矩形选框工具选中画布右侧的照片并删除
存储为png格式的图片。为后续操作方便,命名为1.pn这样我们就得到了一个右边是透明的图片,以此类推,连续再做5张,分别命名为2.png--6.png.
(正题开始 )在会声会影中建六条复叠轨,按一定顺序把做好的6张照片放入复叠轨,区间统一为3秒。次序如下:
第一条复叠轨:1 2 3 1 1 2 3 4 5 6 6
第二条复叠轨:1 1 4 5 3 2 3 4 5
第三条复叠轨:2 2 2 1 4 5 6
第四条复叠轨:3 3 4 5 6
第五条复叠轨:4 6 6
第六条复叠轨:5
到此,六条复叠轨上已经放上呈倒三角形的共36张相片
选中第一条复叠轨的第一张相片,应用复叠选项,添加一个全透明的遮罩帧,在预览窗口右键,调到屏幕大小,再保持宽高比,
添加画中画滤镜。
具体的照片属性设置:
1、所有照片大小为60,位置可以定为X和Y均为0,边框和阴影全部为0,反射可以根据自己喜好设置一下就行。先设置好第1张,其他的都复制粘贴属性即可。
2、第一轨的第1到第6张,Y旋转角度分别设为:-180到-120;-180到-120;-180到-120;0到60;60到 120;60到120.
第二轨的第1到第5张,Y旋转角度分别设为:-120到-60;-60到0;-180到-120;0到60;120到180.
第三轨的第1到第4张,Y旋转角度分别设为:-120到-60;-60到0;-60到0;0到60.
第四轨的第1到第3张,Y旋转角度分别设为:-120到-60;-180到-120;-60到0. 第五轨的第1到第2张,Y旋转角度分别设为:-120到-60;-180到-120.
第六轨的第1张,Y旋转角度设为:-120到-60.
3、从第六轨第2张照片开始(包括上面的五、四、三、二、一轨同一纵行的照片),完全可以按照照片的序号依次往后排列而且同一轨道上的照片属性完全相同,你要做的就是把照片排列好后,依次去复制粘贴属性即可。只是注意别粘贴错了……。它们的属性分别是: 第一轨的第7张,Y旋转角度:60到120,这一轨往后的都是这属性。
第二轨的第6张,Y旋转角度:120到180,这一轨往后的都是这属性。
第三轨的第5张,Y旋转角度:-180到-120,这一轨往后的都是这属性。
第四轨的第4张,Y旋转角度:0到60,这一轨往后的都是这属性。
第五轨的第3张,Y旋转角度:-60到0,这一轨往后的都是这属性。 第六轨的第2张,Y旋转角度:-120到-60,这一轨往后的都是这属性。 好了,希望能对喜欢制作旋转木马的会友们有所帮助。
土豆有一些视频教程,对照着看效果更佳。
《旋转木马图片》出自:百味书屋
链接地址:http://www.850500.com/news/69114.html
转载请保留,谢谢! |
|