
题主是否想询问“android:src和android:background有什么区别”?用途不同,显示内容不同。
1、用途方面。android:src用于ImageView组件,而android:background用于View组件。
2、显示内容不同。android:src用于图像内容的显示,而android:background用于背景色或图案的填充。
1 放在sdcard中, Bitmap imageBitmap = BitmapFactorydecodeFile(path) (path 是的路径,跟目录是/sdcard)2 在项目的res文件夹下面 //得到application对象 ApplicationInfo appInfo = getApplicationInfo(); //得到该的id(name 是该的名字,"drawable" 是该存放的目录,appInfopackageName是应用程序的包) int resID = getResources()getIdentifier(name, "drawable", appInfopackageName); //代码如下 public Bitmap getRes(String name) {ApplicationInfo appInfo = getApplicationInfo();int resID = getResources()getIdentifier(name, "drawable", appInfopackageName);return BitmapFactorydecodeResource(getResources(), resID);}3 放在src目录下 String path = "com/xiangmu/testpng"; //存放的路径 InputStream is = getClassLoader()getResourceAsStream(path); //得到流4android中有个Assets目录,这里可以存放只读文件资源获取的方式为 InputStream is = getResources()getAssets()open(name);
1、实现原理:用户打开相册或相机选择相片后,相片经过压缩并设置在控件上,在本地sd卡存一份(如果有的话,没有则内部存储,所以还
需要判断用户是否挂载了sd卡),然后在服务器上存储一份该,当下次再次启动应用时,会默认去sd卡加载该,如果本地没有,再会去联网请求
2、使用了picasso框架以及自定义BitmapUtils工具类
3、记得加上相关权限
<uses-permission android:name="androidpermissionINTERNET"></uses-permission>
<uses-permission android:name="androidpermissionCAMERA"/>
<uses-permission android:name="androidpermissionWRITE_EXTERNAL_STORAGE"></uses-permission>
/
public class MainActivity extends AppCompatActivity implements ViewOnClickListener {
private ImageView iv;//要设置的头像
private Button btn_photo;//调用相册按钮
private Button btn_camera;//调用相机按钮
@Override
protected void onCreate(Bundle savedInstanceState) {
superonCreate(savedInstanceState);
setContentView(Rlayoutactivity_main);
iv=(ImageView) findViewById(Ridiv);
btn_photo = (Button) findViewById(Ridbtn_photo);
btn_camera = (Button) findViewById(Ridbtn_camera);
btn_photosetOnClickListener(this);
btn_camerasetOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (vgetId()) {
case Ridbtn_photo://打开系统相册
Intent intent=new Intent(IntentACTION_PICK, MediaStoreImagesMediaEXTERNAL_CONTENT_URI);
startActivityForResult(intent,100);
break;
case Ridbtn_camera://打开系统相机
Intent intent2=new Intent(MediaStoreACTION_IMAGE_CAPTURE);
startActivityForResult(intent2,200);
break;
}
}
@RequiresApi(api = BuildVERSION_CODESKITKAT)
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
superonActivityResult(requestCode, resultCode, data);
if(requestCode==100&&resultCode==RESULT_OK&&data!=null){//系统相册
Uri imageData = datagetData();
String path=getPath(imageData);
Bitmap bitmap = BitmapFactorydecodeFile(path);
Bitmap bitmap1 = BitmapUtilszoom(bitmap, ivgetWidth(), ivgetHeight());
Bitmap bitmap2 = BitmapUtilscircleBitmap(bitmap1);
//加载显示
ivsetImageBitmap(bitmap2);
//bitmap上传到服务器
//bitmap保存到本地
saveImage(bitmap2);
}else if(requestCode==200&&resultCode==RESULT_OK&&data!=null){//系统相机
Bitmap bitmap = (Bitmap) datagetExtras()get("data");
BitmapUtilszoom(bitmap,ivgetWidth(),ivgetHeight());
bitmap=BitmapUtilscircleBitmap(bitmap);
//加载显示
ivsetImageBitmap(bitmap);
//bitmap上传到服务器
//bitmap保存到本地
saveImage(bitmap);
}
}
/
数据的存储。(5种)
Bimap:内存层面的对象。
存储--->内存:
BitmapFactorydecodeFile(String filePath);
BitmapFactorydecodeStream(InputStream is);
内存--->存储:
bitmapcompress(BitmapCompressFormatPNG,100,OutputStream os);
/
private void saveImage(Bitmap bitmap) {
File filesDir;
if(EnvironmentgetExternalStorageState()equals(EnvironmentMEDIA_MOUNTED)){//判断sd卡是否挂载
//路径1:storage/sdcard/Android/data/包名/files
filesDir = thisgetExternalFilesDir("");
}else{//手机内部存储
//路径:data/data/包名/files
filesDir = thisgetFilesDir();
}
FileOutputStream fos = null;
try {
File file = new File(filesDir,"iconpng");
fos = new FileOutputStream(file);
bitmapcompress(BitmapCompressFormatPNG, 100,fos);
} catch (FileNotFoundException e) {
eprintStackTrace();
}finally{
if(fos != null){
try {
fosclose();
} catch (IOException e) {
eprintStackTrace();
}
}
}
}
//如果本地有,就不需要再去联网去请求
private boolean readImage() {
File filesDir;
if(EnvironmentgetExternalStorageState()equals(EnvironmentMEDIA_MOUNTED)){//判断sd卡是否挂载
//路径1:storage/sdcard/Android/data/包名/files
filesDir = getExternalFilesDir("");
}else{//手机内部存储
//路径:data/data/包名/files
filesDir = getFilesDir();
}
File file = new File(filesDir,"iconpng");
if(fileexists()){
//存储--->内存
Bitmap bitmap = BitmapFactorydecodeFile(filegetAbsolutePath());
ivsetImageBitmap(bitmap);
return true;
}
return false;
}
@RequiresApi(api = BuildVERSION_CODESKITKAT)
private String getPath(Uri uri) {
int sdkVersion = BuildVERSIONSDK_INT;
//高于442的版本
if (sdkVersion >= 19) {
Loge("TAG", "uri auth: " + urigetAuthority());
if (isExternalStorageDocument(uri)) {
String docId = DocumentsContractgetDocumentId(uri);
String[] split = docIdsplit(":");
String type = split[0];
if ("primary"equalsIgnoreCase(type)) {
return EnvironmentgetExternalStorageDirectory() + "/" + split[1];
}
} else if (isDownloadsDocument(uri)) {
final String id = DocumentsContractgetDocumentId(uri);
final Uri contentUri = ContentUriswithAppendedId(Uriparse("content://downloads/public_downloads"),
LongvalueOf(id));
return getDataColumn(this, contentUri, null, null);
} else if (isMediaDocument(uri)) {
final String docId = DocumentsContractgetDocumentId(uri);
final String[] split = docIdsplit(":");
final String type = split[0];
Uri contentUri = null;
if ("image"equals(type)) {
contentUri = MediaStoreImagesMediaEXTERNAL_CONTENT_URI;
} else if ("video"equals(type)) {
contentUri = MediaStoreVideoMediaEXTERNAL_CONTENT_URI;
} else if ("audio"equals(type)) {
contentUri = MediaStoreAudioMediaEXTERNAL_CONTENT_URI;
}
final String selection = "_id=";
final String[] selectionArgs = new String[]{split[1]};
return getDataColumn(this, contentUri, selection, selectionArgs);
} else if (isMedia(uri)) {
String[] proj = {MediaStoreImagesMediaDATA};
Cursor actualimagecursor = thismanagedQuery(uri, proj, null, null, null);
int actual_image_column_index = actualimagecursorgetColumnIndexOrThrow(MediaStoreImagesMediaDATA);
actualimagecursormoveToFirst();
return actualimagecursorgetString(actual_image_column_index);
}
} else if ("content"equalsIgnoreCase(urigetScheme())) {
// Return the remote address
if (isGooglePhotosUri(uri))
return urigetLastPathSegment();
return getDataColumn(this, uri, null, null);
}
// File
else if ("file"equalsIgnoreCase(urigetScheme())) {
return urigetPath();
}
return null;
}
/
uri路径查询字段
@param context
@param uri
@param selection
@param selectionArgs
@return
/
public static String getDataColumn(Context context, Uri uri, String selection, String[] selectionArgs) {
Cursor cursor = null;
final String column = "_data";
final String[] projection = {column};
try {
cursor = contextgetContentResolver()query(uri, projection, selection, selectionArgs, null);
if (cursor != null && cursormoveToFirst()) {
final int index = cursorgetColumnIndexOrThrow(column);
return cursorgetString(index);
}
} finally {
if (cursor != null)
cursorclose();
}
return null;
}
private boolean isExternalStorageDocument(Uri uri) {
return "comandroidexternalstoragedocuments"equals(urigetAuthority());
}
public static boolean isDownloadsDocument(Uri uri) {
return "comandroidprovidersdownloadsdocuments"equals(urigetAuthority());
}
public static boolean isMediaDocument(Uri uri) {
return "comandroidprovidersmediadocuments"equals(urigetAuthority());
}
public static boolean isMedia(Uri uri) {
return "media"equals(urigetAuthority());
}
/
@param uri The Uri to check
@return Whether the Uri authority is Google Photos
/
public static boolean isGooglePhotosUri(Uri uri) {
return "comgoogleandroidappsphotoscontent"equals(urigetAuthority());
}
/
判断本地是否有该,没有则去联网请求
/
@Override
protected void onResume() {
superonResume();
if(readImage()){
return;
}
}
}
//BitmapUtils工具类public class BitmapUtils { /
该方法用于将进行圆形处理
/ public static Bitmap circleBitmap(Bitmap source){ //默认只对宽进行处理 int width=sourcegetWidth(); Bitmap bitmap=BitmapcreateBitmap(width,width,BitmapConfigARGB_8888); Canvas canvas=new Canvas(bitmap); Paint paint=new Paint(); //设置抗锯齿 paintsetAntiAlias(true); canvasdrawCircle(width/2,width/2,width/2,paint); paintsetXfermode(new PorterDuffXfermode(PorterDuffModeSRC_IN)); canvasdrawBitmap(source,0,0,paint); return bitmap; } / 该方法用于压缩处理,注意width、height参数的类型必须是float / public static Bitmap zoom(Bitmap source,float width,float height){ Matrix matrix=new Matrix(); //进行压缩处理 matrixpostScale(width/sourcegetWidth(),height/sourcegetHeight()); Bitmap bitmap = BitmapcreateBitmap(source, 0, 0, sourcegetWidth(), sourcegetHeight(), matrix, false); return bitmap; }}
以上所述是小编给大家介绍的Android实现调用系统图库与相机设置头像并保存在本地及服务器 ,希望对大家有所帮助
IT168 评测现在一台智能手机继承了非常多的功能,很多的人都会选择使用手机来听歌,手机的音乐播放功能足以取代了以前的MP3播放器的位置。实用手机来听歌当然是非常方便,但是往往会觉得手机的音质并不是太好,特别是安卓系统的智能手机。
▲智能手机SRC测试
其实安卓智能系统的音频架构导致了安卓手机的音乐播放质量差的问题,问题根源在于安卓系统在播放采样频率高于441KHz的音频是会强制音频的采样频率降低到441KHz,在这个过程中直接导致了出现SRC的问题,这是安卓系统的硬伤。关于安卓系统音频架构可参考《寻找音质变差元凶 聊聊Android音频架构》
什么是SRC?SRC即Sample Rate Converter,中文意思为采样频率转换。它被声卡爱好者所关注,大部分发烧友视SRC为音质杀手。
▲安卓手机普遍存在SRC问题
最近我们收到了一款智能手机针对这个问题提出了他们的解决方案,使得安卓手机在音乐播放音质方面可以领先与其他的安卓智能手机,事实是否如此?下面我们来测试一下。
如何测试?
这款智能手机能够解决安卓系统SRC问题在众多手机厂商中算是第一个,我们来对这款手机测试一下,首先是使用20Hz到20KHz的全频扫描进行测试,之后是进行主观听感的测试。
▲测试使用的441KHz音频和48KHz音频
全频扫描测试使用2个采样频率的wav文件,441KHz的音频和48KHz的音频,将文件放在手机中进行播放,使用cool edit pro录音,对录音进行频谱分析,入股出现SRC频频就会出现杂乱无章的线路。
▲正常没出SRC的图像
▲出现SRC时的图像
第二张图就是SRC的图像,现在很多安卓手机都会存在SRC问题,理论上测试结果和第二张图相似,而步步高vivo智能手机解决了SRC问题测试结果应该要接近第一张图。
▲测试使用E-MU 0404专业声卡
由于我们手上没有专业的测试设备,只能使用电脑进行测试,测试使用E-MU 0404 PC专业声卡作为输入声卡,采用cool edit pro来录音,由于测试环境并不是十分专业可能会有少量的噪音引入,而图像也不是十分完美,但也可以反映出问题。
SRC测试
这次测试不仅仅针对某品牌的智能手机,我们也找来了Nexus S和魅族M9进行对比,下面来看一下测试的结果。
441KHz采样频率音频扫描:
▲Nexus S测试图像(点击放大)
▲魅族M9测试图像(点击放大)
▲某品牌安卓测试图像(点击放大)
上面的测试图可以看到安卓系统在441KHz的采样频率下图像都是非常干净的,代表音质是没有受到任何影响,这是由于安卓音频架构规定的采样频率是441KHz,对于大部分的MP3音频都是在441KHz的采样频率,对于MP3音频安卓系统基本上问题不大。
48KHz采样频率音频扫描
48KHz采样频率音频扫描是这次测试的重点,因为安卓系统的音频架构限制了441KHz的采样频率,所以高于441KHz的采样频率就会转换成441KHz,直接导致音质变差,下面来看一下测试结果。
▲Nexus S测试图像(点击放大)
▲魅族M9测试图像(点击放大)
测试结果惨不忍睹,Nexus S采用安卓40系统SRC问题依然存在,图像出现了很多的交错的线条,而魅族M9采用安卓23系统测试的图像也说明SRC问题非常严重。
▲某品牌安卓智能手机测试图像(点击放大)
某品牌安卓智能手机进行48KHz采样频率音频扫描结果要比上面两款手机要好很多,只在扫描直线上面出现一条很浅色的直线,像对于其他的安卓系统已经是一个非常大的飞跃,对于播放高音质的音频这款安卓智能手机能更好还原原本音质。
主观听感:
▲测试使用的48KHz采样频率的MP3
说完理论的东西来点实际的听感,试用手机听音乐已经是相当普遍,测试使用2首48KHz采样频率的MP3进行测试,试听某品牌智能手机上和其他智能手机音质有什么区别。
▲测试使用UE TF10耳机
首先来听一下一般安卓手机播放48KHz采样频率的MP3,测试使用了UE TF10入耳耳机,听感觉得声音偏暖,有点朦胧的感觉,而音乐的细节有些地方无法很好的展现,这个问题在几台安卓手机上同样遇到,音色都是暖,细节表现不佳。而用耳机听回前面的20Hz-20KHz扫描是明显发现问题了,除了扫描信号的声音外还可以听到背后有一些跟着扫描信号一起响起的音频扫描声音,这就是图像上交错的线条,严重影响听感。
再来说一下某品牌智能手机上的听感,试听这2只48KHz采样频率的MP3时整体声音很清晰自然,细节表现非常清晰,没有过多的音染,音场也比较宽广,整体上表现非常好。再听音频扫描信号,并没有出现前面的情况,只会听到音频扫描信号,非常干净,没有任何干扰。
测试总结:
▲SRC问题解决究竟用了什么技术?
通过这个测试可以看到某品牌的安卓智能手机很好地解决了安卓手机SRC问题,提升了安卓手机音频播放的音质,虽然由于保密原因现在不方便公布这品牌,而且还不知道采用了什么技术来解决安卓系统的SRC问题,但是可以肯定的是这个品牌的安卓智能手机是第一个解决安卓系统SRC问题的手机。这个决绝SRC问题的技术也将会会公布,到时我们也会为大家公布这个手机品牌和型号。
Android开发之ImageView播放GIF动画实例
Android的原生控件并不支持播放GIF格式的,如果想在Android中显示一张GIF动态,可以利用 ImageView控件来完成,但是放进去之后,你会发现,ImageView它只会显示这张的第一帧,不会产生任何的动画效果。我们必须通过自定义控件的方式来实现ImageView播放GIF 的功能。
首先我们来编写一个PowerImageView控件,让它既能支持ImageView控件原生的所有功能,同时还可以播放GIF动态。
先新建一个项目PowerImageViewTest,这里使用Android 40+Eclipse。
由于是要自定义控件,会需要一些自定义的控件属性,因此我们需要在values目录下新建一个attrsxml的文件,在这个文件中添加项目需要的自定义属性。
这里我们目前暂时只需要一个自动播放auto_play属性,XML文件代码如下:
<xml version="10" encoding="utf-8">
这个文件完成之后,下面我们来开始编写主类PowerImageView类,由于PowerImageView类需要支持ImageView的所有功能,我们必须要让PowerImageView继承自ImageView,代码如下:
public class PowerImageView extends ImageView implements OnClickListener {
/
播放GIF动画的关键类
/
private Movie mMovie;
/
开始播放按钮
/
private Bitmap mStartButton;
/
记录动画开始的时间
/
private long mMovieStart;
/
GIF的宽度
/
private int mImageWidth;
/
GIF的高度
/
private int mImageHeight;
/
是否正在播放
/
private boolean isPlaying;
/
是否允许自动播放
/
private boolean isAutoPlay;
/
PowerImageView构造函数。
@param context
/
public PowerImageView(Context context) {
super(context);
}
/
PowerImageView构造函数。
@param context
/
public PowerImageView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
/
PowerImageView构造函数,在这里完成所有必要的初始化 *** 作。
@param context
/
public PowerImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
TypedArray a = contextobtainStyledAttributes(attrs, RstyleablePowerImageView);
int resourceId = getResourceId(a, context, attrs);
if (resourceId != 0) {
// 当资源id不等于0时,就去获取该资源的流
InputStream is = getResources()openRawResource(resourceId);
// 使用Movie类对流进行解码
mMovie = MoviedecodeStream(is);
if (mMovie != null) {
// 如果返回值不等于null,就说明这是一个GIF,下面获取是否自动播放的属性
isAutoPlay = agetBoolean(RstyleablePowerImageView_auto_play, false);
Bitmap bitmap = BitmapFactorydecodeStream(is);
mImageWidth = bitmapgetWidth();
mImageHeight = bitmapgetHeight();
bitmaprecycle();
if (!isAutoPlay) {
// 当不允许自动播放的时候,得到开始播放按钮的,并注册点击事件
mStartButton = BitmapFactorydecodeResource(getResources(),Rdrawablestart_play);
setOnClickListener(this);
}
}
}
}
@Override
public void onClick(View v) {
if (vgetId() == getId()) {
// 当用户点击时,开始播放GIF动画
isPlaying = true;
invalidate();
}
}
@Override
protected void onDraw(Canvas canvas) {
if (mMovie == null) {
// mMovie等于null,说明是张普通的,则直接调用父类的onDraw()方法
superonDraw(canvas);
} else {
// mMovie不等于null,说明是张GIF
if (isAutoPlay) {
// 如果允许自动播放,就调用playMovie()方法播放GIF动画
playMovie(canvas);
invalidate();
} else {
// 不允许自动播放时,判断当前是否正在播放
if (isPlaying) {
// 正在播放就继续调用playMovie()方法,一直到动画播放结束为止
if (playMovie(canvas)) {
isPlaying = false;
}
invalidate();
} else {
// 还没开始播放就只绘制GIF的第一帧,并绘制一个开始按钮
mMoviesetTime(0);
mMoviedraw(canvas, 0, 0);
int offsetW = (mImageWidth - mStartButtongetWidth()) / 2;
int offsetH = (mImageHeight - mStartButtongetHeight()) / 2;
canvasdrawBitmap(mStartButton, offsetW, offsetH, null);
}
}
}
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
superonMeasure(widthMeasureSpec, heightMeasureSpec);
if (mMovie != null) {
// 如果是GIF则重写设定PowerImageView的大小
setMeasuredDimension(mImageWidth, mImageHeight);
}
}
/
开始播放GIF动画,播放完成返回true,未完成返回false。
@param canvas
@return 播放完成返回true,未完成返回false。
/
private boolean playMovie(Canvas canvas) {
long now = SystemClockuptimeMillis();
if (mMovieStart == 0) {
mMovieStart = now;
}
int duration = mMovieduration();
if (duration == 0) {
duration = 1000;
}
int relTime = (int) ((now - mMovieStart) % duration);
mMoviesetTime(relTime);
mMoviedraw(canvas, 0, 0);
if ((now - mMovieStart) >= duration) {
mMovieStart = 0;
return true;
}
return false;
}
/
通过Java反射,获取到src指定资源所对应的id。
@param a
@param context
@param attrs
@return 返回布局文件中指定资源所对应的id,没有指定任何资源就返回0。
/
private int getResourceId(TypedArray a, Context context, AttributeSet attrs) {
try {
Field field = TypedArrayclassgetDeclaredField("mValue");
fieldsetAccessible(true);
TypedValue typedValueObject = (TypedValue) fieldget(a);
return typedValueObjectresourceId;
} catch (Exception e) {
eprintStackTrace();
} finally {
if (a != null) {
arecycle();
}
}
return 0;
}
}
这个类的代码注释已经非常详细了,我再来简单地解释一下。可以看到,我们重写了ImageView中所有的构建函数,使得 PowerImageView的用法可以和ImageView完全相同。在构造函数中,则是对所有必要的数据进行了初始化 *** 作。首先,我们调用了 getResourceId()方法去获取资源对应的id值,在getResourceId()方法内部是通过Java的反射机制来进行获取的。得到了资源的id后,我们将它转换成InputStream,然后传入到MoviedecodeStream()方法中以解码出Movie对象。如果得到的Movie对象等于null,说明这是一张普通的资源,就不再进行任何特殊处理,因为父类ImageView都帮我们处理好了。如果得到的 Movie对象不等于null,则说明这是一张GIF,接着就要去获取是否允许自动播放、的宽高等属性的值。如果不允许自动播放,还要给播放按钮 注册点击事件,默认是不允许自动播放的。
接下来会进入到onMeasure()方法中。在这个方法中我们进行判断,如果这是一张GIF,则需要将PowerImageView的宽高重定义,使得控件的大小刚好可以放得下这张GIF。
再往后就会进入到onDraw()方法中。在这个方法里同样先判断当前是一张普通的还是GIF,如果是普通的就直接调用 superonDraw()方法交给ImageView去处理就好了。如果是GIF,则先判断该图是否允许自动播放,允许的话就调用 playMovie()方法去播放GIF就好,不允许的话则会先在PowerImageView中绘制该GIF的第一帧,并在上绘制一个播放 按钮,当用户点击了播放按钮时,再去调用playMovie()方法去播放GIF。
下面我们来看看playMovie()方法中是怎样播放GIF的吧。可以看到,首先会对动画开始的时间做下记录,然后对动画持续的时间做下记 录,接着使用当前的时间减去动画开始的时间,得到的时间就是此时PowerImageView应该显示的那一帧,然后借助Movie对象将这一帧绘制到屏 幕上即可。之后每次调用playMovie()方法都会绘制一帧,连贯起来也就形成了GIF动画。注意,这个方法是有返回值的,如果当前时间减去动画 开始时间大于了动画持续时间,那就说明动画播放完成了,返回true,否则返回false。
完成了PowerImageView的编写,下面我们就来看一看如何使用它吧,其实非常简单,打开或新建activity_mainxml,代码如下所示:
<relativelayout p=""
android:layout_width="match_parent"
android:layout_height="match_parent" >
<comexamplepowerimageviewtestpowerimageview p=""
android:id="@+id/image_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:src="@drawable/anim"
/>
可以看到,PowerImageView的用法和ImageView几乎完全一样,使用android:src属性来指定一张即可,这里指定的anim就是一张GIF。然后我们让PowerImageView在布局里居中显示MainActivity中的代码都是自动生成的,这里就不再贴出来了。在AndroidManifestxml中还有一点需要注意,有些40 以上系统的手机启动了硬件加速功能之后会导致GIF动画播放不出来,因此我们需要在AndroidManifestxml中去禁用硬件加速功能,可以通过指定android:hardwareAccelerated属性来完成,代码如下所示:
<xml version="10" encoding="utf-8">
<manifest p=""
package="comexamplepowerimageviewtest"
android:versionCode="1"
android:versionName="10" >
<uses-sdk p=""
android:minSdkVersion="14"
android:targetSdkVersion="17" />
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme"
android:hardwareAccelerated="false"
>
android:name="comexamplepowerimageviewtestMainActivity"
android:label="@string/app_name" >
现在可以来运行一下代码了,一打开程序你就会看到GIF的第一帧,点击之后就可以播放GIF动画了。
然后我们还可以通过修改activity_mainxml中的代码,给它加上允许自动播放的属性,代码如下所示:
<relativelayout p=""
xmlns:attr=">
怎样批量获取网页中的所有地址?求大神帮助
你可以用探嗅软体,影音神探,探嗅,可以批量获取网页中的所有地址, :crsky/soft/3520 这里可以下载。
如何批量下载一个网页的所有?急!:jingyanbaidu/article/8275fc869e170f46a03cf6e4
首先开启你的浏览器,然后在浏览器介面上方右击滑鼠,选择选单栏,如果你的浏览器已经有选单栏了,这一步可以省略~
然后,点选档案——储存网页
在选择储存格式的时候,一定要选择网页,全部,不然储存下来的是没有图的哦~
接着点选储存按钮,将整个网页都储存下来~
储存下来的有一个资料夹和一个网页档案,双击开启那个资料夹~
里面全是网页上的了,但是尺寸只是你看到的尺寸哦,如果嫌这些尺寸太小,不合用,比如桌布,建议还是直接在网页上点选下载,这样可以下载高清的哦,直接批量储存网页有利有弊啦
求助怎么获取exe程式的所有这是pdf加密档案,可以直接破解出原来的不加密档案,破解后任何电脑都能看,也可以复制和列印的。
怎样一键提取网页里的所有?简单,你点网页另存为:网页,全部(htm;),储存到桌面上,储存完以后,桌面上会出现一个新资料夹里边装了所有。
java获取某个网页所有并下载到电脑我不晓得你的指的是背景图还是只包含img标签内的,其实区别不大
1、首先 一个urlConnection,连结到你想要的网址,得到response的inputStream,
2、把返回的response当做一个xml解析(推荐使用jsoup,更方便一些),得到所有的img标签,遍历标签的src,下载得到所有的,这边需要注意下 有些网站可能会使用防盗链,低阶的你完全可以用cookie糊弄过去,高阶的就不太好搞了。需要你改一些request中的属性例如Referer之类的,再蛋疼的就需要拿到返回的二级制档案,然后本地重绘了。。。。
3、如果背景图什么的也要的话 ,拿到页面中的css档案,得到所有的连结,重复第二部的 *** 作。。。。
如何全选网页中的所有 将之复制呢
你把网页整个储存 储存的档案中就有一个资料夹是所有的 自己复制就好了
怎样在chrome中批量获取网页中所需媒体的连结地址chrome浏览器用小乐图客扩充套件,可以批量获取连结地址,具体步骤:
:jingyanbaidu/article/63acb44ada434a61f17ee4
如何通过js获取网页中所有并加入点选事件,实现在网页载入完成时,通过js获取和新增点选的识别方式
- (void)webViewDidFinishLoad:(UIWebView )webView {
[IDProgressHUD IDPlaceViewHideDirect:selfview];
这里是js,主要目的实现对url的获取
static NSString const jsGetImages =
@"function getImages(){\
var objs = documentgetElementsByTagName(\"img\");\
var imgScr = '';\
for(var i=0;i<objslength;i++){\
imgScr = imgScr + objs[i]src + '+';\
};\
return imgScr;\
};";
[webView stringByEvaluatingJavaScriptFromString:jsGetImages];注入js方法
NSString urlResurlt = [webView stringByEvaluatingJavaScriptFromString:@"getImages()"];
mUrlArray = [NSMutableArray arrayWithArray:[urlResurlt ponentsSeparatedByString:@"+"]];
if (mUrlArraycount >= 2) {
[mUrlArray removeLastObject];
}
urlResurlt 就是获取到得所有的url的拼接;mUrlArray就是所有Url的阵列
新增可点选js
[mWebView stringByEvaluatingJavaScriptFromString:@"function registerImageClickAction(){\
var imgs=documentgetElementsByTagName('img');\
var length=imgslength;\
for(var i=0;i<length;i++){\
img=imgs[i];\
imgonclick=function(){\
windowlocationhref='image-preview:'+thissrc}\
}\
}"];
[mWebView stringByEvaluatingJavaScriptFromString:@"registerImageClickAction();"];
}
在这个方法中捕获到的点选事件和被点选的url
- (BOOL)webView:(UIWebView )webView shouldStartLoadWithRequest:(NSURLRequest )request navigationType:(UIWebViewNavigationType)navigationType {
预览
if ([requestURLscheme isEqualToString:@"image-preview"]) {
NSString path = [requestURLabsoluteString substringFromIndex:[@"image-preview:" length]];
path = [path stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
path 就是被点选的url
return NO;
}
return YES;
}
android如何获取相簿所有从本地选择(比如按钮触发该事件,调取系统相簿)
if (EnvironmentgetExternalStorageState()equals(
EnvironmentMEDIA_MOUNTED)) {
Intent getImageIntent = new Intent(IntentACTION_GET_CONTENT);
getImageIntentaddCategory(IntentCATEGORY_OPENABLE);
getImageIntentsetType("image/jpeg");
startActivityForResult(getImageIntent, 4);
} else {
ToastmakeText(getApplicationContext(), "SD卡不可用", 0)show();
}
本地选择 结果
在activity的onactivityresult()中写:
if (data != null) {判空
Uri uri = datagetData();
urigetPath()toString();
ContentResolver cr = thisgetContentResolver();
try {
Bitmap bmp;压缩
BitmapFactoryOptions option = new BitmapFactoryOptions();
optioninJustDecodeBounds = true;
optioninPurgeable = true;
optioninInputShareable = true;
optioninSampleSize = 2;
optioninJustDecodeBounds = false;
bmp = BitmapFactorydecodeStream(cropenInputStream(uri),
null, option);
imageView_userLogo(view控制元件设定背景)
imageView_userLogosetImageBitmap(BmpToRound
toRoundBitmap(bmp));
File file = SaveBitmapToSdCardsaveMyBitmap(
getApplicationContext(),
"" + SystemcurrentTimeMillis(), bmp);
startUpLoad(file);
} catch (FileNotFoundException e) {
eprintStackTrace();
}
}
如何获取一个网页内的所有邮箱地址求大神帮助我告诉你,你去下载一个MAILGHOST的软体。输入网址他就全部给你抓下来。
记得采纳啊
以上就是关于android:src和android:background全部的内容,包括:android:src和android:background、android怎么实现导入图片、安卓从手机相册获取照片作为头像缓存地址等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)