android解析图片
㈠ Android 简单的图片查看器
说明:在文件管理器中,可以使用这个app来打开图片
ImageView 常用的一些XML属性和方法:
支持的scaleType 属性:
在打开图片的Activity里需要必须设置以下三个属性:
可以通过设置 mimeType 来关联对应的类型,比如: mimeType="vedio/* 关联视频格式的文件等。
详细可以参考: Android 常用 mimeType 表
读取图片,需要写入到外部存储器(SD卡)的权限:
<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
如果是 API23 以上还需要动态权限:
自定义权限的格式: 包名.permission.权限名
自定义权限需要在 Manifest 文件里使用 <permission android:name="..." /> 语法 进行注册。
PackageManager.PERMISSION_GRANTED 表示权限允许; PackageManager.PERMISSION_DENIED 表示权限拒绝。
㈡ tif格式在android手机里用什么软件打开
下载一个快速的图像查看器就可以查看tif格式的文件了。
1、打开手机界面,找到“浏览器”图标
㈢ Android怎么解析带图片的xml数据
前言的前言:因为内容较多,此系列将分多篇文章记载。
1、关于图片格式
android使用的图片格式有3种:png、jpg、gif。
官方推荐使用png格式的图片。
jpg格式的图片是不被推荐使用的。
gif格式的图片是建议不使用的。
2、图片资源调用
1、通过resource ID进行Bitmap资源的调用,例如getDrawable(int)、android:drawable或者android:icon等,一般bitmap资源文件放在res/drawable-XXXX文件夹下,这也是推荐的存放位置,因为放在此文件夹下的图片资源android aapt工具会自动优化图片资源文件,例如将24-bit位图或者32-bit位图降色到8-bit位图,以节省内存,同时也不会失真。
2、如果你不希望对图片进行优化处理,可以将图片
㈣ Android中 怎么获取apk中的素材图片
有些APK程序里的图标、图片很漂亮,在使用程序时你可能会想,如果能把这些漂亮的图标、图片提取出来就好了,其实这是可以办到的,请看教程。
更多例子请参考android学习手册,里面有源码。android学习手册包含9个章节,108个例子,源码文档随便看,例子都是可交互,可运行,源码采用android studio目录结构,高亮显示代码,文档都采用文档结构图显示,可以快速定位。360手机助手中下载,图标上有贝壳
本教程以“电影超人”的APK安装包为例,其它APK程序的提取方法基本相同。以下内容需要在电脑中进行操作。
1.用压缩软件打开APK
APK程序其实就是个ZIP压缩包,想提取其中的资源就得先用解压缩软件将其打开,如图我们在APK安装包上右键、打开方式、选择压缩软件,我这里选择的是RAR,如果你安装的是其它的解压缩软件,选择它即可。如果你以前没有用压缩软件打开过APK文件,可以点击选择默认程序然后找到解压缩软件进行打开。
2.解压图片文件夹
用解压缩软件打开APK程序后,如图里面有几个文件夹,我们拖出“res”这个文件,一般APK程序的图片资源都在这个文件中。
3.寻找需要的图片
把“res”文件夹解压后我们打开可以看到里面的几个文件夹一般程序图标等图片都在“drawable-hdpi”这个文件夹,打开看看,是不是有自己需要的东西,如果没有再到其它的几个文件夹中查找一下。APK文件里的图片都是png格式的,可直接查看,这点比水果要厚道了许多。
4.反编译查找资源
也许大家发现了,解压后“电影超人”里大量的电影图片并没有看到,那是因为APK程序制作时把它们编译到了“resources.arsc”文件里我们想提取的话把APK文件进行反编译就可以了。具体反编译方法这里就不讲解了,请自行网络。
㈤ android怎么用流 读取云端图片
在java 直接用BitmapFactory.decodeFile(pathName);就可以读取。
或者用你的方式,BitmapFactory.decodeStream(fosfrom);
SE的学习过程中,我们就接触到了I/O流的概念,并且使用了一些文件输入输出流的API来将数据保存到文件或者是从文件中读取数据。同样,这个手段也适用于Android系统,我们可以在应用开发过程中使用文件相关的API方法。
何谓内部存储呢?实际上就是指将程序的私有数据以文件的形式存储在Android设备的内存中。同理,如果是存放在SD卡等地方,就称之为外部存储。
我们在,你需要建立文件的输入输出流,并在流中操作数据。
首先是写文件。
为了使用内部存储向文件中写入一些数据,你可以调用openFileOutput()方法,需要的参数为文件名和写入模式。写入模式实际上就是该文件的权限归属,可以是公有的,也可以是私有的。如何具体地创建一个文件输出流呢,具体方式如下:
FileOutputStream fileOut =
openFileOutput("file_name",MODE_WORLD_READABLE);
//第一个参数即文件名,第二个参数表示文件存储的模式
对于第二个参数,需要补充的是:文件存储的模式公有四种:
MODE_PRIVATE:该模式是默认的,通过该模式创建的文件是私有的,即只能被应用本身访问。注意:在该模式下写入的内容会覆盖原有的内容。
MODE_APPEND:与上个模式类似,但在写入内容时会检查待创建的文件是否存在。若文件已被创建,则往该文件中追加内容,而不是覆盖原来的内容;若文件未被创建,则创建新的文件。
MODE_WORLD_READABLE:表示当前创建的这个文件允许被其他应用读取。
MODE_WORLD_WRITEABLE:表示当前创建的这个文件允许被其他应用写入。
默认情况下,不仅是应用创建的文件,包括Shared
Preferences和数据库,都是私有的。那么问题来了,如果希望其他应用既能读又能写,应该怎么办呢?参考下面这种用法:
FileOutputStream fileOut = openFileOutput("file_name",MODE_WORLD_READABLE +
MODE_WORLD_WRITEABLE);
而对于openFileOutput()方法,它返回的是一个FileOutputStream实例。换言之,你通过文件输出流对象中得到了这个实例,随后你便可以调用写相关的方法来向文件写入数据。具体的用法如下:
String str = "shiyanlou";
//待写入的数据
fOut.write(str.getBytes());
//实际上写入文件的是一个字节数组,我们用gettBytes()方法将其转换成目标格式
fOut.close();
//记得写入完毕后要用close()结束
接下来是读文件。
怎样读取我们刚刚创建的这个文件呢?你应该猜到了,是使用openFileInput()方法。该方法需要填入待读取文件的文件名,同样,它返回的是一个FileInputStream的实例。具体用法如下:
FileInputStream fileIn = openFileInput(file);
在打开输入流后,你可以调用read()方法每次从文件中读出一个字符出来,然后装入一个字符串变量中。具体做法如下:
int ch;
String temp="";
while( (ch = fin.read()) != -1){
temp = temp + Character.toString((char)ch);
//不断地追加读取的内容
}
//通过一个for循环,你最后得到的temp字符串包含了文件中的所有数据
fileIn.close();
//记得要关闭输入流
除了上面我们用到的这些方法(比如write()、read()和close()),FileOutputStream和FileInputStream类中还有很多常用的方法,我们在下面作一简要介绍。
FileOutputStream类中的其它常用方法:
write(byte[] b, int off, int len):该方法从指定的字节数组开始到该文件输出流关闭写入len字节。
getChannel():该方法返回一个只读的、与文件输出流关联的文件通道对象(FileChannel)
getFD():该方法返回与此流有关的文件描述符对象(FileDescriptor)
FileInputStream类中的其它常用方法:
read(byte[] b, int off, int len):该方法从输入流中数据读取最多len个字节到字节数组
getChannel():该方法返回一个只读的、与文件输出流关联的文件通道对象(FileChannel)
getFD():该方法返回与此流有关的文件描述符对象(FileDescriptor)
available():该方法可通过一个方法的调用者从输入流中阻止这个输入流返回可以读取(或跳过)的字节数的估计值。
四、在Android上实现文件读写
下面我们通过一个实例来学习如何将Java中常用的文件读写沿用到Android中去。
实验步骤主要有:
(若你已在第二小节完成,请跳至下一步)使用Android
Studio创建应用项目FileIOPractice,包名为com.shiyanlou.android.fileiopractice,基于Android
5.1制作。同时添加MainActivity及其布局资源文件。
创建并打开AVD模拟器(镜像选择API22:Android 5.1.1)。
在res/layout/activity_main.xml资源文件放入一些文本框和按钮。
在MainActivity.java中,初始化要用到的控件,添加文件读写相关的代码。
编译并运行这个应用,等待应用安装至模拟器,在模拟器中使用该应用。
现在你可以按照上述步骤自己完成该实验。下面也给出了本实验涉及到的源代码和资源文件详情,在必要时你可以使用它们。在注释中我们也对一些模块进行了详细的讲解。
以下是MainActivity的布局文件res/layout/activity_main.xml:
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".MainActivity">
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textview_domain"
android:text="Shiyanlou.com"
android:textSize="40dp"
android:textColor="#11AA8C"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" />
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView_appName"
android:text="File I/O Practice"
android:layout_below="@+id/textview_domain"
android:layout_centerHorizontal="true"
android:textColor="#000000"
android:textSize="40dp" />
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/editText"
android:hint="Input some text here."
android:focusable="true"
android:layout_marginTop="20dp"
android:layout_below="@+id/textView_appName"
android:layout_alignEnd="@+id/textView_appName"
android:layout_alignLeft="@+id/textView_appName"
android:layout_alignStart="@+id/textView_appName"
android:layout_alignRight="@+id/textView_appName"
android:inputType="textMultiLine"
android:minLines="5"
android:background="#DDDDDD" />
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView_data"
android:text="Text would be shown here."
android:layout_below="@+id/button_save"
android:layout_marginTop="10dp"
android:layout_centerHorizontal="true" />
android:layout_width="120dp"
android:layout_height="wrap_content"
android:id="@+id/button_save"
android:text="Save File"
android:textColor="#FFFFFF"
android:background="#11AA8C"
android:layout_alignLeft="@+id/textView_appName"
android:layout_alignStart="@+id/textView_appName"
android:layout_below="@+id/editText"
android:layout_marginTop="20dp"/>
android:layout_width="120dp"
android:layout_height="wrap_content"
android:id="@+id/button_load"
android:text="Load File"
android:textColor="#FFFFFF"
android:background="#11AA8C"
android:layout_alignTop="@+id/button_save"
android:layout_alignRight="@+id/editText"
android:layout_alignEnd="@+id/editText" />
以下是src/MainActivity.java中的源代码:
package com.shiyanlou.android.fileiopractice;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class MainActivity extends Activity {
private Button button_save;
private Button button_load;
private TextView textView_status;
private EditText editText;
//声明各个控件
private String data;
private String file = "shiyanlou_file";
//声明用于存放数据的变量data和文件名常量file
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button_save =(Button)findViewById(R.id.button_save);
button_load =(Button)findViewById(R.id.button_load);
editText =(EditText)findViewById(R.id.editText);
textView_status =(TextView)findViewById(R.id.textView_data);
//实例化各个控件
//为按钮设置点击事件监听器
//首先是保存按钮(写操作)
button_save.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
data = editText.getText().toString();
//调用getText()方法从文本框中读取内容,使用toString()方法将其转化为String类型数据,并存放到data变量中
try {
//对于文件读写操作应使用异常处理流程
FileOutputStream fileOut = openFileOutput(file, MODE_APPEND);
// 此处用到了MODE_PRIVATE,在新版本的Android系统中,不推荐使用MODE_WORLD_READABLE等模式
// 这是因为Android中为应用间的数据交互提供了更好的支持,如Content Privoder等,你可一进步了解
fileOut.write(data.getBytes());
//用write()方法保存数据
fileOut.close();
//关闭输出流
Toast.makeText(getBaseContext(), "File saving completed.",
Toast.LENGTH_SHORT).show();
//用一个Toast来告诉用户已经写入完毕了
} catch (Exception e) {
e.printStackTrace();
}
}
});
//其次是读取按钮(读操作)
button_load.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
//同理,建立文件输入流
FileInputStream fileIn = openFileInput(file);
int ch;
//声明一个整型变量ch用于接收数据
String tempText = "";
//这里的tempText用于临时存放读取的数据(字符串)
while ((ch = fileIn.read()) != -1) {
//这里的-1是特定的状态码,表示文件读取结束
//在while循环中逐个读取数据,并追加到tempText中
tempText = tempText + Character.toString((char) ch);
//将ch转化为字符
}
textView_status.setText(tempText);
//读取完毕后将文字显示出来
Toast.makeText(getBaseContext(), "File reading completed.",
Toast.LENGTH_SHORT).show();
//同样用一个Toast告知用户已经读取完成
} catch (Exception e) {
}
}
});
}
}
检查一下代码,编译并运行该应用。在模拟器中尝试输入一些信息,保存一下,再试着读取它们。