从零开始学Android (4)
来源:互联网 发布:淘宝网上窗帘 编辑:程序博客网 时间:2024/05/01 05:17
有了前面说到的代码,貌似已经可以显示一个横向滑动的画面了,但是距离我得要求还有一定的距离,因为subpage的xml源码如下
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="#0000" > <ImageView android:id="@+id/mainpage_promotion_1_image" android:layout_width="fill_parent" android:layout_height="fill_parent" android:src="@drawable/p_1"/> </LinearLayout>
通过代码可以看出,这里的ImageView中显示的image是静态的,也就是说,在构建工程的时候就要将image放到工程文件里,这样显然不能满足从网上动态取得图片并且显示的要求,于是,新的挑战又来了。
从网上download图片
经过多番查找,发现下面的这段代码可以支持从网上download图片并显示
ImageProxy extends AsyncTask<String, Integer, Bitmap> { ImageView bmImage; LinearLayout progressBar; public ImageProxy(ImageView bmImage) { this.bmImage = bmImage; } protected Bitmap doInBackground(String... urls) { String urldisplay = urls[0]; Bitmap mIcon11 = null; try { InputStream in = new java.net.URL(urldisplay).openStream(); mIcon11 = BitmapFactory.decodeStream(in); } catch (Exception e) { Log.e("Error", e.getMessage()); e.printStackTrace(); } return mIcon11; } protected void onPostExecute(Bitmap result) { // HIDE THE SPINNER AFTER LOADING FEEDS bmImage.setImageBitmap(result); }
虽然后来事实证明这段代码确实可用,但是最开始的时候,在模拟器调试的时候仍然遇到了问题,代码始终出现permission的问题,上网查资料发现,需要在manifast文件中添加internet的user-permission
<uses-permission android:name="android.permission.INTERNET" />
添加后,仍然报其他的网络相关的错误,查了大把的资料,仍然不得解。终于,本系列博文的第一章提到的那个developer.android.com网站发挥了关键性作用。如果你的计算机使用了带密码的wifi或者需要代理服务器的话,android模拟器要设定apn才您能够通过电脑的网络上网。具体如下:
第一步,设定->更多->移动网络->接入点名称(APN),进入APN页面
第二步,按Menu键,选择“新建APN”
第三步,添上上对应的内容(如下图),然后按Menu键,选择“保存”
终于,图片可以正常download。
在画面Layout中通过id找到指定的控件
接下来,就是如何把这个图片更新到画面上。也就是ImageProxy构造的时候应该如何从当前的画面布局中找到ImageView并作为参数传递进去。如果大家还记得我们前面的代码,会发现,ImageView并没有定义在activity_main.xml中,而是定义在activity_subpage.xml中,然后在MainActivity.java中通过后台代码加载进Main视图
//将要分页显示的View装入数组中 LayoutInflater inflater = getLayoutInflater(); pageViews = new ArrayList<View>(); pageViews.add(inflater.inflate(R.layout.activity_sub_page,null));
如此一来,如果直接通过
inflater.inflate(R.layout.activity_sub_page,null).findViewById(R.id.mainpage_promotion_1_image);
是无法取得Main视图中的imageview控件的,而需要通过pageViews才能正确取得,代码如下
(ImageView)pageViews.get(0).findViewById(R.id.mainpage_promotion_1_image);
好了,到此大功告成,从网上download的图片可以正常显示在main activity中了。
- 从零开始学Android (4)
- 从零开始学Android (1)
- 从零开始学Android (2)
- 从零开始学Android (3)
- 从零开始学Android(〇)
- 从零开始学Android(一)
- 从零开始学Android(二)
- 从零开始学Android(三)
- 从零开始学Android(四)
- 从零开始学Android(五)
- 从零开始学Android(六)
- 从零开始学Android(七)
- 从零开始学Android(八)
- 从零开始学Android(九)
- 第4章、打包Android应用(从零开始学Android)
- 第4章、打包Android应用(从零开始学Android)
- 第4章、打包Android应用(从零开始学Android)
- 第4章、打包Android应用(从零开始学Android)
- 在sdk的17以上版本webview中js不能调用java代码
- 细谈select函数(C语言)
- ExpandableListView 的几个有用点的属性
- 实现一键加群
- 解压缩文件
- 从零开始学Android (4)
- 关于javascript中apply()和call()方法的区别
- 英国4岁女童患“iPad成瘾症”接受治疗 引担忧
- 交互设计入门(2)交互设计的职能
- 得到 集合中不同的部分
- 提高英语水平
- js屏蔽右键菜单
- 能量项链-rqnoj-4
- vs中的快捷操作总结