Android用ImageView显示本地和网上的图片
- 格式:docx
- 大小:14.22 KB
- 文档页数:2
Android基础篇之在ListView中显示网络图片大家知道ImageView 类虽然有一个setImageUri 方法,但不能直接接受一个由网络地址生成的uri 作为参数从而显示图片,我们只好使用其 setImageBitmap 方法,如view plaincopy to clipboardprint?1.BitmapmBitmap=null;2.3.URLurl=new URL(imageUrl);4.5.HttpURLConnectionconn=(HttpURLConnection)url.openConnection();6.7.InputStream is=conn.getInputStream();8.9.mBitmap=BitmapFactory.decodeStream(is);在SimpleAdapter中需要一个数据源,用来存储数据的,在显示图片时我们要用HashMap<>存储一个Bitmap;但仅存取了Bitmap时在ListView中是无法显示图片的,我们需要对SimpleAdapter进行处理 。
如下是对SimpleAdaptr处理的主要代码:view plaincopy to clipboardprint?1.adapter.setViewBinder(new ViewBinder(){2.3.publicboolean setViewValue(Viewview,Objectdata,4.StringtextRepresentation){5.//判断是否为我们要处理的对象6.if(view instanceof ImageView&&data instanceof Bitmap){7.ImageViewiv=(ImageView)view;8.9.iv.setImageBitmap((Bitmap)data);10.returntrue;11.}else12.returnfalse;13.}14.});看API对Android.widget.SimpleAdapter.ViewBinder的解释:This class can be used by external clients of SimpleAdapter to bind values to views. You should use this class to bind values to views that are not directly supported by SimpleAdapter or to change the way binding occurs for views supported by SimpleAdapter.你可以使用该类来处理SimpleAdapter不直接支持的数据;下面来看看完整的代码:main.xml 中就是一个ListView , list_item.xml 是为ListView中控件提供布局 ,就是一个ImageView。
我们做Android 程序的时候,有时候需要显示图片在界面上,这里我们将实现一个将图片展示到手机屏幕,并让其不停的浮动的效果!首先我们要先准备一张图片,在这里我准备了一张图片,如下:将此图片放到文件夹"res->drawable-*dpi"下,记得,三个文件夹都要放,因为系统会根据不同的分辨率去取不同的图片,如果有的没放,在某些分辨率下,会找不到资源。
将此图片重命名为“pic.png”,在R.java里的drawable类里会生成一个pic的常量。
图片要显示,就是要容器可以让其显示,因为所有的Android 的UI组件都是继承自View,View也实现了Drawable接口,所以在此,我们也重新定义一个View让其用来显示我们的这张图片,并让这张图片浮动。
我们创建一个在包“org.leo.bitmap”下的,类名为“MovingPictureView”的类,该类继承自android.view.View。
此类目前代码大致如下:public class MovingPictureView extends View {public MovingPictureView(Context context) {super(context);}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);}}我们要重载他的“onDraw”方法,这个方法就是Android框架展现View的时候用来绘制显示内容那个的方法。
在此我们将他的所有方法体都删除掉(上面代码红色部分删掉),完全将其重写。
首先我们要创建一个图片对象,在Android里,所有位图图片都是使用Bitmap类来封装的,我们就先声明一个代表我们刚才图片的一个Bitmap对象,可通过以下方式声明:Bitmap bitmap =BitmapFactory.decodeResource(getResources(), R.drawable.pic);其中的“getResources()”方法,是有View提供的,可以根据此方法获得我们所有的资源,将来有机会再细说!有了bitmap对象,下一步就是将图片画到我们自己的View上了,看上面的“onDraw”方法,其中的参数是“Canvas”对象,其实就是提供了一个画板,有了画板我们就能画任何我们想画的东西了。
android中打开相机、打开相册进⾏图⽚的获取⽰例这⾥介绍在Android中实现相机调取、拍照⽚、获取照⽚、存储新路径等已经打开相册、选择照⽚等功能⾸先看⼀下界⾯,很简单配置读取内存卡和调⽤照相头的功能<!-- 使⽤⽹络权限 --><uses-permission android:name="android.permission.INTERNET"/><!-- 写sd卡的权限 --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><!-- 读sd卡权限 --><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />下⾯是代码的主题public class TakePhotos extends Activity implementsandroid.view.View.OnClickListener {Button takePhoto;Bitmap photo;String picPath;Button capture;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(yout.activity_photo);takePhoto = (Button) findViewById(R.id.button1);capture = (Button) findViewById(R.id.capture);takePhoto.setOnClickListener(this);capture.setOnClickListener(this);}@Overridepublic void onClick(View viewid) {switch (viewid.getId()) {case R.id.button1: {// 打开相机String state = Environment.getExternalStorageState();// 获取内存卡可⽤状态if (state.equals(Environment.MEDIA_MOUNTED)) {// 内存卡状态可⽤Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");startActivityForResult(intent, 1);} else {// 不可⽤Toast.makeText(TakePhotos.this, "内存不可⽤", Toast.LENGTH_LONG).show();}break;}case R.id.capture: {// 打开相册// 打开本地相册Intent i = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);// 设定结果返回startActivityForResult(i, 2);break;}default:break;}}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {// TODO Auto-generated method stubsuper.onActivityResult(requestCode, resultCode, data);if (data != null) {switch (requestCode) {// 两种⽅式获取拍好的图⽚if (data.getData() != null || data.getExtras() != null) { // 防⽌没有返回结果Uri uri = data.getData();if (uri != null) {this.photo = BitmapFactory.decodeFile(uri.getPath()); // 拿到图⽚}if (photo == null) {Bundle bundle = data.getExtras();if (bundle != null) {photo = (Bitmap) bundle.get("data");FileOutputStream fileOutputStream = null;try {// 获取 SD 卡根⽬录⽣成图⽚并String saveDir = Environment.getExternalStorageDirectory()+ "/dhj_Photos";// 新建⽬录File dir = new File(saveDir);if (!dir.exists())dir.mkdir();// ⽣成⽂件名SimpleDateFormat t = new SimpleDateFormat( "yyyyMMddssSSS");String filename = "MT" + (t.format(new Date()))+ ".jpg";// 新建⽂件File file = new File(saveDir, filename);// 打开⽂件输出流fileOutputStream = new FileOutputStream(file);// ⽣成图⽚⽂件press(pressFormat.JPEG,100, fileOutputStream);// 相⽚的完整路径this.picPath = file.getPath();ImageView imageView = (ImageView) findViewById(R.id.imageView1); imageView.setImageBitmap(this.photo);} catch (Exception e) {e.printStackTrace();} finally {if (fileOutputStream != null) {try {fileOutputStream.close();} catch (Exception e) {e.printStackTrace();}}}Toast.makeText(getApplicationContext(), "获取到了",Toast.LENGTH_SHORT).show();} else {Toast.makeText(getApplicationContext(), "找不到图⽚",Toast.LENGTH_SHORT).show();}}}break;case 2: {//打开相册并选择照⽚,这个⽅式选择单张// 获取返回的数据,这⾥是android⾃定义的Uri地址Uri selectedImage = data.getData();String[] filePathColumn = { MediaStore.Images.Media.DATA };// 获取选择照⽚的数据视图Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);cursor.moveToFirst();// 从数据视图中获取已选择图⽚的路径int columnIndex = cursor.getColumnIndex(filePathColumn[0]);String picturePath = cursor.getString(columnIndex);cursor.close();// 将图⽚显⽰到界⾯上ImageView imageView = (ImageView) findViewById(R.id.imageView1); imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath)); break;}default:}}}}注释的很详细,⾃⼰分析吧。
Android开发中ImageButton与ImageView的使用问题提出使用一般的按钮虽然能够实现我们需要的功能,但是程序却并不美观,用户体验也不佳。
那么如何让我们的Android开发用于个性化的按钮呢?问题分析其实,在Android开发中,做到这点还是很方便的。
Android系统的设计者们早就为我们准备了两个基本控件——ImageView和ImageButton,用来显示图片和制作图片按钮。
在本例,我们将简单了解如何使用这两个控件,比如如何动态改变他们的图片。
问题解决本例包含一个ImageView和一个ImageButton,介绍:1.在项目中导入自己的图像2.在ImageView中显示图像3.改变ImageView的图像4.I mageButton的碰触事件处理一、打开Eclipse,建立一个Android工程,属性如下:Project name:ImageButton_ImageViewBuild Target:Android 2.2PacketName:com.androidwhy.ImageButton_ImageView二、布置控件。
在main.xml中添加一个ImageView、一个ImageButton,id属性如下:三、项目实现1. 在项目中导入自己的图像在Android项目中,我们自己的图像都可以放置在res/drawable中,drawable 表现为drawable-hdpi、drawable-mdpi、drawable-ldpi 三个文件夹,他们分别储存不同大小的图像文件,以适应在不同分辨率的手机显示的需求。
将自己的图像导入到自己的项目中的方法很简单,就是将图像复制到res/drawable-hdpi文件夹下,再在项目中刷新下就可以了。
如图:这样,我们就在我们的项目中导入了自己的图像了,接下来我们就可以使用这些图像了。
2. 在ImageView中使用的图像在Android 开发中,要ImageView 上显示图像,我们可以设置ImageView 的src 属性或background 属性,在xml 文件中的引用方法是:view sourceprint?1 android:src="@drawable/imgview1"2 //在java 代码中的引用方法是:3 //声明:4 private ImageView imgV1;5 //实例化:6 imgV1 = (ImageView)findViewById(R.id.imageView1);7 //设置图像:8 imgV1.setImageResource(R.drawable.imgview2);效果如图:设置background的方法类似,这里就不再赘述了。
android imageview 的centerinside 的实现原理概述及解释说明1. 引言1.1 概述本文将详细介绍Android中的ImageView控件的centerInside属性以及其实现原理。
ImageView作为一个常用的界面元素,用于显示图片资源。
其中,centerInside是ImageView的一种缩放类型,通过该属性可以使图片按比例缩放到View内部,并保持图像完整展示。
1.2 文章结构本文共分为五个部分,每个部分都有详细的内容和说明。
文章结构如下:第一部分为引言部分。
我们将在这里概述文章的目的和结构。
第二部分将重点说明ImageView控件的centerInside属性的实现原理。
首先介绍ImageView控件,并解释其作用和效果;然后深入剖析centerInside属性的实现原理。
第三部分将详细解析centerInside属性的具体实现过程。
包括图片尺寸适应策略、图像平移和缩放算法的分析,并通过实例演示和代码解释来加深理解。
第四部分将进行样例应用和使用场景的分析。
我们将展示不同情况下centerInside属性的效果,并对其使用场景进行讨论;最后,推荐最佳实践方法供读者参考。
最后一部分是结论与总结。
首先总结了ImageView中centerInside工作原理,然后展望了应用与拓展前景,并提出了预期的发展方向和改进建议。
1.3 目的本文的主要目的是帮助读者了解Android中ImageView控件的centerInside 属性的实现原理。
通过深入分析,让读者能够清晰地理解这一属性在图片尺寸适应、平移和缩放等方面的工作原理。
同时,我们还将介绍其在不同使用场景下的效果展示,并提供最佳实践方法,以便读者在实际开发中能够更好地使用该属性。
2.imageview 的centerinside 的实现原理2.1 imageview 控件介绍Android平台上的ImageView是一个常用的控件,用于显示图片。
Android 3.1 r1 API中文文档(6)——ImageView前言本章内容是android.widget.ImageView,为早前发布版本的完整版,版本为Android 3.1 r1,翻译来自"cnmahj"和"农民伯伯",欢迎大家访问"cnmahj"的博客:,再次感谢"/cnmahj"!欢迎你一起参与Android的中文翻译,联系我over140@。
声明欢迎转载,但请保留文章原始出处:)博客园:/Android中文翻译组:http://goo.gl/6vJQlImageView译者署名:cnmahj、农民伯伯译者博客:/cnmahj版本:Android 3.1 r1结构继承关系public class View.OnClickListner extends Viewng.Objectandroid.view.Viewandroid.widget.ImageView直接子类ImageButton, QuickContactBadge间接子类ZoomButton类概述显示任意图像,例如图标。
ImageView类可以加载各种来源的图片(如资源或图片库),需要计算图像的尺寸,比便它可以在其他布局中使用,并提供例如缩放和着色(渲染)各种显示选项。
嵌套类enum ImageView.ScaleType将图片边界缩放,以适应视图边界时的可选项XML属性公共方法public final void clearColorFilter ()(译者注:清除颜色过滤,参见这里)public int getBaseline ()返回部件顶端到文本基线的偏移量。
如果小部件不支持基线对齐,该方法返回-1。
返回值小部件顶端到文本基线的偏移量;或者是-1 当小部件不支持基线对齐时。
public boolean getBaselineAlignBottom ()返回当前视图基线是否将考虑视图的底部。
android android读取资源文件的方法Android开发中,我们经常需要读取应用程序中的资源文件,如图片、文字、xml等。
Android提供了一套API供我们方便地读取这些资源文件。
本文将介绍几种读取资源文件的方法。
一、读取图片资源文件1.通过资源ID读取图片资源在我们的应用程序中,通常会将图片存放在res/drawable文件夹下。
我们可以通过资源ID来获取这些图片。
```ImageView imageView = findViewById(R.id.imageView);imageView.setImageResource(R.drawable.my_image);```其中,R.drawable.my_image是图片资源文件的ID。
通过调用setImageResource方法,我们可以将该资源文件设置给ImageView。
2.通过文件名读取图片资源有时候,我们可能需要根据文件名来读取图片资源。
可以使用以下方法来实现:```String fileName = "my_image.png";Resources resources = getResources();int resId = resources.getIdentifier(fileName, "drawable", getPackageName());imageView.setImageResource(resId);```首先,我们需要获取Resources对象,然后调用getIdentifier方法,传入文件名、资源类型和包名,最后获取到资源ID。
接下来,就可以通过setImageResource方法将资源文件设置给ImageView。
二、读取文字资源文件在应用程序中,我们可能需要读取文字资源文件,如strings.xml。
可以使用以下方法来读取:```String textValue =getResources().getString(R.string.my_text);textView.setText(textValue);```其中,R.string.my_text是文字资源文件的ID。
Android超⼤图长图浏览库SubsamplingScaleImageView源码解析⼀开始没打算分析 SubsamplingScaleImageView 这个开源的图⽚浏览器的,因为这个库在我们 App 中使⽤了,觉得⾃⼰对这个库还是⽐较熟悉的,结果某天再看看到源码介绍的时候,才发现⾃⼰对其了解并不够深⼊,所以这才打算再细细看看源码的实现,同时记录⽅便以后回顾。
那么 SubsamplingScaleImageView 有啥优点呢?1. 采⽤ GestureDetector 进⾏⼿势控制,⽀持图⽚的点击,双击,滑动等来控制的放⼤缩⼩;2. 使⽤了 BitmapRegionDecoder,具有分块加载功能;3. ⽀持查看长图,超⼤图上⾯的优点简直就是⾮常实⽤,基本上拿来就可以直接⽤,简单省⼒。
下⾯就是要来分析,它是如何满⾜这些优点的。
源码分析⾸先附上源码地址:使⽤说明如果可以拿到图⽚的资源id,assert或者⽂件路径,直接使⽤下⾯⽅式进⾏使⽤:SubsamplingScaleImageView imageView = (SubsamplingScaleImageView)findViewById(id.imageView);imageView.setImage(ImageSource.resource(R.drawable.monkey));// ... or ...imageView.setImage(ImageSource.asset("map.png"))// ... or ...imageView.setImage(ImageSource.uri("/sdcard/DCIM/DSCM00123.JPG"));如果可以拿到 bitmap 就可以这么使⽤:SubsamplingScaleImageView imageView = (SubsamplingScaleImageView)findViewById(id.imageView);imageView.setImage(ImageSource.bitmap(bitmap));可以看到使⽤是⾮常简单的。
《Android应用开发教程第2版》课后习题参考答案第一章1.主流的Android版本有哪些,各有何特点?Android最早的一个发布版本开始于2007年11月的Android 1.0 beta,其后发布了多个更新版本。
这些更新版本都在前一个版本的基础上修复了bug并且添加了前一个版本所没有的新功能。
从2009年4月开始,Android操作系统改用甜点来作为版本代号,这些版本按照大写字母的顺序来进行命名:纸杯蛋糕(Cupcake)、甜甜圈(Donut)、闪电泡芙(Éclair)、冻酸奶(Froyo)、姜饼(Gingerbread)、蜂巢(Honeycomb)﹑冰激凌三明治(Ice Cream Sandwich)、雷根糖(Jelly Bean)、奇巧(KitKat)、棒棒糖(Lollipop)、棉花糖(Marshmallow)、牛轧糖(Nougat)、奥利奥(Oreo )、馅饼(Pie)等。
此外,Android操作系统还有两个预发布的内部版本,它们分别是铁臂阿童木(Astro)和发条机器人(Bender)。
2.Android的系统结构如何?由里向外有如下几层:1.Linux Kernel(Linux内核)Android是在Linux2.6的内核基础之上运行的,提供核心系统服务:安全、内存管理、进程管理、网络组、驱动模型。
2.Android Runtime(Android运行时)内核之上是核心库和一个叫做Dalvik的JAVA虚拟机。
核心库提供了Java语言核心库中包含的大部分功能,虚拟机负责运行程序。
3.Libraries(库)Android提供了一组C/C++库,它们为平台的不同组件所使用。
开发人员通过Application Framework来使用这些库所提供的不同功能。
4.Application Framework(应用程序框架)无论Android提供的应用程序还是开发人员自己编写的应用程序,都需要使用到Application Framework。
android手把手开发一个图片浏览器这次我给大家讲解一个Android图片浏览器的应用。
AndroidAndroid是基于Linux内核的软件平台和操作系统,早期由Google开发,后由开放手机联盟Open Handset Alliance)开发。
它采用了软件堆层(software stack,又名以软件叠层)的架构,主要分为三部分。
低层以Linux内核工作为基础,只提供基本功能;其他的应用软件则由各公司自行开发,以Java作为编写程序的一部分。
另外,为了推广此技术,Google和其它几十个手机公司建立了开放手机联盟。
Android在未公开之前常被传闻为Google电话或gPhone。
大多传闻认为Google开发的是自己的手机电话产品,而不是一套软件平台。
到了2010年1月,Google开始发表自家品牌手机电话的Nexus One。
目前最新版本为Android2.1。
下图是它的结构:简单来讲,Android就是一个开源的手机软件开发工具。
我主要给大家讲应用方面,大家如果有兴趣,可以了解相关基本知识。
要开发一个Android应用,首先得搭建Android开发环境:下载并安装Android sdk(Software Development Kit, 即软件开发工具包)。
由于Android 开发是集成在Eclipse中,需下载并安装ADT (Eclipse集成Android sdk插件)。
搭建环境会用一个专门的章节为大家详细讲解,这里我就不再赘述。
Android开发环境搭好后,我们先启动Eclipse创建一个Android的应用程序,然后在左上角单击File,New,Android Project,如下图所示:如果在图中Java Project找不到Android Project:在左上角单击File,New,Other:在弹出框中Android文件件中选中Android Project,然后单击Next进入下一步:弹出一个列表框:下面对这个列表的一些重要属性进行讲解:1.应用程序名称以及内容栏:2.工具栏:采用的编译工具即Android模拟器:3.属性栏:即应用程序中的相关属性:Android 这就是我们刚才创建的一个Android应用程序如下图:在这里面,我们最关心的是界面(main.xml)与后台(Test1.java):单击main.xml:我们先看看中间视图:这是一个页面编辑器模式:在左下角点击main.xml切换到界面编码模式:这就是刚才页面视图的源码:下面让我们看看后台(Test1.java)源码:单击Test1.java:以下将此类程序称之为activity(活动),该activity运行时会自动调用onCreate方法:而上图中onCreate方法是启动res文件夹下的layout下的main.xml界面。
Android利⽤Glide获取图⽚真正的宽⾼的实例前⾔有时候需要获取⽹络图⽚的宽⾼来设置图⽚显⽰的⼤⼩,很多⼈会直接利⽤Glide的加载监听去拿图⽚的宽⾼,但是这样拿到的不是图⽚真正的宽⾼,⽽是图⽚显⽰在ImageView后的宽⾼。
如下://获取图⽚显⽰在ImageView后的宽⾼Glide.with(this).load(imgUrl).asBitmap()//强制Glide返回⼀个Bitmap对象.listener(new RequestListener<String, Bitmap>() {@Overridepublic boolean onException(Exception e, String model, Target<Bitmap> target, boolean isFirstResource) {Log.d(TAG, "onException " + e.toString());return false;}@Overridepublic boolean onResourceReady(Bitmap bitmap, String model, Target<Bitmap> target, boolean isFromMemoryCache, boolean isFirstResource) { int width = bitmap.getWidth();int height = bitmap.getHeight();Log.d(TAG, "width2 " + width); //400pxLog.d(TAG, "height2 " + height); //400pxreturn false;}}).into(mIv_img);想要拿到图⽚真正的宽⾼,应该利⽤Glide的Target。
android自定义ImageView实现缩放,回弹效果androidImageview缩放回弹话不多说上代码:MainActivity.javapublic class MainActivity extends Activity{private LinearLayout ll_viewArea;private youtParams parm;private ViewArea viewArea;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//去除titlerequestWindowFeature(Window.FEATURE_NO_TITLE);//去掉Activity上面的状态栏getWindow().setFlags(youtParams.FLAG_FULLSCREEN,youtParams. FLAG_FULLSCREEN);setContentView(yout.main);ll_viewArea = (LinearLayout) findViewById(R.id.ll_viewArea); parm = newyoutParams(youtParams.FILL_PARENT, youtParams.FILL_PARENT);viewArea = newViewArea(MainActivity.this,R.drawable.psu); //自定义布局控件,用来初始化并存放自定义imageViewll_viewArea.addView(viewArea,parm);}}这段代码中要注意的问题是去掉title和状态栏两句代码必须放到setContentView(yout.main);话的前面。
而且这两句话必须有,因为后面计算回弹距离是根据全屏计算的(我的i9000就是480x800),如果不去掉title 和状态栏,后面的回弹会有误差,总是回弹不到想要的位置。
Android长按imageview把图⽚保存到本地的实例代码⼯具类之前⽤AsyncTask现在改⽤rxJavapublic class SaveImageUtils {public static void imageSave(final ImageView imageView, final int id) {Observable.create(new Observable.OnSubscribe<ImageView>() {@Overridepublic void call(Subscriber<? super ImageView> sub) {sub.onNext(imageView);}}).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new MySubscriber<ImageView>() {@Overridepublic void onNext(ImageView imageView) {File imageFile = new File(ActivityUtils.ImagePath(), id + ".jpg");FileOutputStream outStream = null;try {outStream = new FileOutputStream(imageFile);Bitmap image = imageView.getDrawingCache();press(pressFormat.JPEG, 100, outStream);outStream.flush();outStream.close();Toast.makeText(UIUtils.getContext(), UIUtils.getString(R.string.save_picture_success), Toast.LENGTH_LONG).show();} catch (IOException e) {e.printStackTrace();onError(e);}}@Overridepublic void onError(Throwable e) {Toast.makeText(UIUtils.getContext(), UIUtils.getString(R.string.save_picture_failed), Toast.LENGTH_LONG).show();}});}}MySubscriberpublic class MySubscriber<T> extends Subscriber<T> {@Overridepublic void onStart() {super.onStart();}@Overridepublic void onCompleted() {}@Overridepublic void onError(Throwable e) {}@Overridepublic void onNext(T t) {}}//不建议使⽤了package com.app.mly.utils;import android.app.Activity;import android.graphics.Bitmap;import android.os.AsyncTask;import android.os.Environment;import android.widget.ImageView;import android.widget.Toast;import com.fengche.android.mly.R;import java.io.File;import java.io.FileOutputStream;/*** Created by y on 2016/1/14.*/public class SaveImageUtils extends AsyncTask<Bitmap, Void, String> {Activity mActivity;ImageView mImageView;public SaveImageUtils(Activity activity, ImageView imageView) {this.mImageView = imageView;this.mActivity = activity;}@Overrideprotected String doInBackground(Bitmap... params) {String result = mActivity.getResources().getString(R.string.save_picture_failed);try {String sdcard = Environment.getExternalStorageDirectory().toString();File file = new File(sdcard + "/123");if (!file.exists()) {file.mkdirs();}File imageFile = new File(file.getAbsolutePath(), "命名" + ".jpg");FileOutputStream outStream = null;outStream = new FileOutputStream(imageFile);Bitmap image = params[0];press(pressFormat.JPEG, 100, outStream);outStream.flush();outStream.close();result = mActivity.getResources().getString(R.string.save_picture_success, file.getAbsolutePath());} catch (Exception e) {e.printStackTrace();}return result;}@Overrideprotected void onPostExecute(String result) {Toast.makeText(mActivity, result, Toast.LENGTH_SHORT).show();mImageView.setDrawingCacheEnabled(false);}}stirng⽂件下需要的⼏个toast<string name="save_picture">保存图⽚</string><string name="save_picture_failed">保存失败</string><string name="save_picture_success">图⽚成功保存⾄%s⽬录</string>代码中引⽤mScanCode.setOnLongClickListener(new View.OnLongClickListener() {@Overridepublic boolean onLongClick(View v) {AlertDialog.Builder builder = new AlertDialog.Builder(ShareActivity.this);builder.setItems(new String[]{getResources().getString(R.string.save_picture)}, new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {mScanCode.setDrawingCacheEnabled(true);Bitmap imageBitmap = mScanCode.getDrawingCache();if (imageBitmap != null) {new SaveImageUtils(ShareActivity.this, mScanCode).execute(imageBitmap);}}});builder.show();return true;}});总结以上所述是⼩编给⼤家介绍的Android长按imageview把图⽚保存到本地的实例代码,希望对⼤家有所帮助,如果⼤家有任何疑问请给我留⾔,⼩编会及时回复⼤家的。
很多时候我们从网络上获取图片,但有时图片路径明明正确,却要出错。
图片小无所谓,图片大了就出错了。
ImageView imageView = new ImageView(context);URL url = new URL("图片路径");URLConnection conn = url.openConnection();conn.connect();InputStream is = conn.getInputStream();BitmapFactory.Options options=new BitmapFactory.Options();options.inSampleSize = 10;originalImage = BitmapFactory.decodeStream(is,null,options);imageView.setImageBitmap(bitmapWithReflection);这样问题就可以解决了////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////在使用的过程中,如果网络比较慢的话,则会出现下载不成功的问题。
经过google搜索,终于解决了这个问题。
一般我们会用以下的代码:java代码://获取connection,方法略conn = getURLConnection(url);is = conn.getInputStream();//获取Bitmap的引用Bitmap bitmap = BitmapFactory.decodeStream(is)但是网络不好的时候获取不了图片,推荐使用以下的方法:java代码://获取长度int length = (int) conn.getContentLength();if (length != -1) {byte[] imgData = new byte[length];byte[] temp=new byte[512];int readLen=0;int destPos=0;while((readLen=is.read(temp))>0){System.arraycopy(temp, 0, imgData, destPos, readLen);destPos+=readLen;}bitmap=BitmapFactory.decodeByteArray(imgData, 0, imgData.length);}使用上面的方法的好处是在网速不好的情况下也会将图片数据全部下载,然后在进行解码,生成图片对象的引用,所以可以保证只要图片存在都可以下载下来。
Android实现图⽚轮播效果的两种⽅法⼤家在使⽤APP的过程中,经常会看到上部banner图⽚轮播的效果,那么今天我们就⼀起来学习⼀下,android中图⽚轮询的⼏种实现⽅法:第⼀种:使⽤动画的⽅法实现:(代码繁琐)这种发放需要:两个动画效果,⼀个布局,⼀个主类来实现,不多说了,来看代码吧:public class IamgeTrActivity extends Activity {/** Called when the activity is first created. */public ImageView imageView;public ImageView imageView2;public Animation animation1;public Animation animation2;public TextView text;public boolean juage = true;public int images[] = new int[] { R.drawable.icon, R.drawable.expriment,R.drawable.changer, R.drawable.dataline, R.drawable.preffitication };public int count = 0;public Handler handler = new Handler();public Runnable runnable = new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubAnimationSet animationSet1 = new AnimationSet(true);AnimationSet animationSet2 = new AnimationSet(true);imageView2.setVisibility(0);TranslateAnimation ta = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF,-1f, Animation.RELATIVE_TO_SELF, 0f,Animation.RELATIVE_TO_SELF, 0f);ta.setDuration(2000);animationSet1.addAnimation(ta);animationSet1.setFillAfter(true);ta = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 1.0f,Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF,0f, Animation.RELATIVE_TO_SELF, 0f);ta.setDuration(2000);animationSet2.addAnimation(ta);animationSet2.setFillAfter(true);//iamgeView 出去 imageView2 进来imageView.startAnimation(animationSet1);imageView2.startAnimation(animationSet2);imageView.setBackgroundResource(images[count % 5]);count++;imageView2.setBackgroundResource(images[count % 5]);text.setText(String.valueOf(count));if (juage)handler.postDelayed(runnable, 6000);Log.i(handler, handler);}};@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.main);imageView = (ImageView) findViewById(R.id.imageView);imageView2 = (ImageView) findViewById(R.id.imageView2);text=(TextView)findViewById(R.id.text);text.setText(String.valueOf(count));//将iamgeView先隐藏,然后显⽰imageView2.setVisibility(4);handler.postDelayed(runnable, 2000);}public void onPause() {juage = false;super.onPause();}}布局代码:android:orientation=verticalandroid:layout_width=fill_parentandroid:layout_height=fill_parentandroid:id=@+id/rl>android:id=@+id/imageViewandroid:layout_width=fill_parentandroid:background=@drawable/iconandroid:layout_below=@+id/rlandroid:layout_height=120dp />android:id=@+id/imageView2android:layout_width=fill_parentandroid:background=@drawable/exprimentandroid:layout_below=@+id/rlandroid:layout_height=120dp />android:id=@+id/textandroid:layout_width=fill_parentandroid:layout_height=wrap_contentandroid:layout_below=@id/imageView/>第⼆种:使⽤ViewFlipper实现图⽚的轮播Android系统⾃带的⼀个多页⾯管理控件,它可以实现⼦界⾯的⾃动切换:⾸先需要为ViewFlipper加⼊View(1) 静态导⼊:在layout布局⽂件中直接导⼊(2) 动态导⼊:addView()⽅法ViewPlipper常⽤⽅法:setInAnimation:设置View进⼊屏幕时候使⽤的动画setOutAnimation:设置View退出屏幕时候使⽤的动画showNext:调⽤该函数来显⽰ViewFlipper⾥⾯的下⼀个View showPrevious:调⽤该函数来显⽰ViewFlipper⾥⾯的上⼀个View setFlipInterval:设置View之间切换的时间间隔startFlipping使⽤上⾯设置的时间间隔来开始切换所有的View,切换会循环进⾏stopFlipping:停⽌View切换讲了这么多,那么我们今天要实现的是什么呢?(1) 利⽤ViewFlipper实现图⽚的轮播(2) ⽀持⼿势滑动的ViewFlipper我们需要先准备⼏张图⽚:把图⽚放进drawable中创建两个动画:在res下⾯新建⼀个folder⾥⾯新建两个xml:left_in:android:duration=5000android:fromXDelta=100%pandroid:toXDelta=0/>left_out:android:fromXDelta=0android:toXDelta=-100%pandroid:duration=5000/>⼀个布局⽂件:xmlns:tools=/toolsandroid:layout_width=match_parentandroid:layout_height=match_parenttools:context=.MainActivity >android:id=@+id/flipperandroid:layout_width=fill_parentandroid:layout_height=fill_parent/>⼀个主类:public class MainActivity extends Activity {private ViewFlipper flipper;private int[] resId = {R.drawable.pc1,R.drawable.pc2,R.drawable.pc3,R.drawable.pc4};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);flipper = (ViewFlipper) findViewById(R.id.flipper);/** 动态导⼊的⽅式为ViewFlipper加⼊⼦View* */for (int i = 0; i < resId.length; i++) {flipper.addView(getImageView(resId[i]));}/** 为ViewFlipper去添加动画效果* */flipper.setInAnimation(this, R.anim.left_in);flipper.setOutAnimation(this, R.anim.left_out);flipper.setFlipInterval(5000);flipper.startFlipping();}private ImageView getImageView(int resId){ImageView image = new ImageView(this);image.setBackgroundResource(resId);return image;}}那么这样就实现了⼀个图⽚轮询的功能效果了我们还可以添加点击,滑动效果:我们还需要添加两个向右的滑动效果:right_in:android:fromXDelta=0android:toXDelta=-100%pandroid:duration=2000/>right_out:android:fromXDelta=100%pandroid:toXDelta=0android:duration=2000/>然后我们还需要在主类⾥⾯添加(如果你不想让图⽚⾃动播放,只想通过⼿势来实现图⽚播放那么你需要把“为ViewFlipper添加动画效果的代码”删掉):publibooleaonTouchEvent(MotionEvenevent{/TODAuto-generatemethostubswitc(event.getAction(){casMotionEvent.ACTION_DOWN:startevent.getX();break;casMotionEvent.ACTION_MOVE://判断向左滑动还是向右滑动i(event.getX(start100{flipper.setInAnimation(thisR.anim.left_in);flipper.setOutAnimation(thisR.anim.left_out);flipper.showPrevious();}elsi(startevent.getX(100{flipper.setInAnimation(thisR.anim.right_in);flipper.setOutAnimation(thisR.anim.right_out);flipper.showNext();}casMotionEvent.ACTION_UP:break;}retursuper.onTouchEvent(event);}这样我们利⽤我们的ViewFlipper完成的图⽚轮询的功能就做完了。
Android用ImageView显示本地和网上的图片
ImageView是Android程序中经常用到的组件,它将一个图片显示到屏幕上。
在UI xml定义一个ImageView如下:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(yout.myimage);
ImageView image1 = (ImageView) findViewById(R.myImage.image);
//Bitmap bitmap = getLoacalBitmap("/aa/aa.jpg"); //从本地取图片
Bitmap bitmap =
getHttpBitmap("/wp-content/themes/twentyten/images/headers/pa th.jpg");
//从网上取图片
image1 .setImageBitmap(bitmap); //设置Bitmap
}
/**
* 加载本地图片
*
* @paramurl
* @return
*/
public static Bitmap getLoacalBitmap(String url) {
try {
FileInputStreamfis = new FileInputStream(url);
returnBitmapFactory.decodeStream(fis);
} catch (FileNotFoundException e) {
e.printStackTrace();
return null;
}
}
/**
* 从服务器取图片
*
* @paramurl
* @return
*/
public static Bitmap getHttpBitmap(String url) {
URL myFileUrl = null;
Bitmap bitmap = null;
try {
Log.d(TAG, url);
myFileUrl = new URL(url);
} catch (MalformedURLException e) {
e.printStackTrace();
}
try {
HttpURLConnection conn = (HttpURLConnection) myFileUrl.openConnection();
conn.setConnectTimeout(0);
conn.setDoInput(true);
conn.connect();
InputStream is = conn.getInputStream();
bitmap = BitmapFactory.decodeStream(is);
is.close();
} catch (IOException e) {
e.printStackTrace();
}
return bitmap;
}。