精华内容
下载资源
问答
  • Android相册

    2011-11-02 18:47:46
    Android相册分两类: 1. 2D 相册,使用com.android.camera包; 2. 3D相册使用com.cooliris.media包 Android虚拟机就是使用2D相册,
    Android相册分两类:
    1. 2D 相册,使用com.android.camera包;
    2. 3D相册使用com.cooliris.media包
    Android虚拟机就是使用2D相册,
    展开全文
  • android 相册源码

    热门讨论 2012-03-20 18:00:24
    android 相册源码 android Gallery3D源码
  • android相册多选

    2014-03-19 09:32:29
    android相册多选,取消选择,显示在界面
  • Android相册示例代码

    2011-09-08 17:56:23
    Android相册示例代码 Android相册示例代码 Android相册示例代码
  • android 相册相机栽剪兼容 android 5.1, 已优化兼容android 4.3 相册 uri 不同,仅供参考,学习,代码如有问题,自行优化,请勿喷
  • LeafPic是一个开源,material设计风格Android相册App。
  • android相册系统(用Matrix实现).zip
  • android相册上传插件

    2014-09-23 13:58:21
    android相册上传插件,可以选择本地图片或者拍照上传。。选定图片后可以截取图片。比较不错的功能插件。
  • android相册或相机选择图片并编辑 相册选取后直接显示以及截图后显示
  • Android相册Demo

    2018-08-23 17:46:39
    查询系统数据库文件,获取手机内所有的图片。采用rxjava获取
  • 很完整的一个Android相册选择图片和拍照剪切上传图片头像的例子,界面干净整洁、漂亮大方。
  • android相册demo

    热门讨论 2014-05-15 01:23:21
    Gallery结合Camera的相册实例 工程源码
  • Android 相册图片多选

    2015-06-08 17:13:49
    Android 图片多选,调用相册,可选择多个图片,可进行多个相册的查看,获取返回值既可使用
  • Unity调用android相册获取图片或视频 (此文章对有unity基础和对环境配置有基础的童嚡容易看懂) 因为项目上用到,在百度了很多大佬的文章后,陆陆续续踩了很多坑,可能是我哪里设置的不对,大部分都没成功,后面捣鼓...

    Unity调用android相册获取图片或视频

    (此文章对有unity基础和对环境配置有基础的童嚡容易看懂)
    因为项目上用到,在百度了很多大佬的文章后,陆陆续续踩了很多坑,可能是我哪里设置的不对,大部分都没成功,后面捣鼓捣鼓着就出来了,如有哪里不对,还请各位大佬多多指教,下面进入正题
    创建一个unity项目,设置unity的包名(例:com.公司名.项目包名)
    在这里插入图片描述
    在assets路径下创建一个Plugins文件夹,这个文件夹一般用来放置需要调用的dll文件,然后在Plugins路径下创建一个Android文件夹(为后面放置aar文件使用),代码后面一起添加。
    我是用的AndroidStudio3.5.2版本,安装Android Studio及环境配置教程比较多,就直接带过,打开Android studio,新建项目
    在这里插入图片描述
    在这里插入图片描述
    然后点击Next下一步
    在这里插入图片描述
    然后点击finish完成,项目构建中,需要几秒钟完成后的出现这个窗口
    在这里插入图片描述
    不用理会,直接Close掉就可以了,创建完成,显示是这样的
    在这里插入图片描述
    然后点击Android图标切换样式,选择Project模式
    在这里插入图片描述
    选完后如下图
    在这里插入图片描述
    打开src文件夹下的main,里面有项目自带的类MyActivity,可以删掉自己建,但我个人比较懒,缩直接修改自带的,打开myactivity然后删掉里面的方法,复制下面的代码到myactivity类中(直接在网上复制了其他博主的,手动狗头)

    package com.Companys.Test;
    import android.content.Context;
    import android.content.Intent;
    import android.os.Bundle;
    import android.util.Log;
    import com.unity3d.player.UnityPlayerActivity;
    
    public class MainActivity extends UnityPlayerActivity{
        private static String LOG_TAG = "LOG_My";
        Context mContext = null;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            mContext = this;
        }
    
        //Unity中会调用这个方法,用于打开本地相册
        public void TakePhoto(String str)
        {
            Log.d(LOG_TAG,str);
            Intent intent = new Intent(mContext,WebViewActivity.class);
            this.startActivity(intent);
        }
    }
    

    TakePhoto这个方法要在unity里面调用的,可以改为自己喜欢的名称,不过在android中改了,在unity也要修改,否则无法调用,复制完后如下
    在这里插入图片描述
    注意第一行的Package包名不用复制,每个人的对应自己建的包名就可以了,复制完后你会发现报错了,这是因为类里面引用unity的类,但这个引用为空,这时就要导入一个jar引用,类似于unity里的dll一样,这个jar文件在unity的安装目录下,要注意你当前创建的unity项目所使用的版本,不是那个版本都可以,我用的是2018.3.8版本,路径为Unity2018.3.8\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes下有个Class.jar,将这个jar文件复制一份,放到刚刚android的项目文件libs文件夹下,如下图
    在这里插入图片描述
    放置完后,文件就在libs文件夹中,但你会发现代码还是报错的,因为还需要再设置下,选中class.jar,然后右键选择Add as Library,如下图
    在这里插入图片描述
    添加后,你会发现很多的报错都没了,但还有一个地方报错,那是因为有个被调用的类不存在,我们直接创建就好了,选中MyActivity所在的文件夹,然后右键New—Java Class,创建一个java类,类名为WebViewActivity,创建完后报错信息就没了,修改WebViewActivity类,将下面的代码复制到WebViewActivity类中,选择图片或视频都在这里,仔细看呦

    package com.Companys.Test;
    import android.app.Activity;
    import android.content.ContentResolver;
    import android.content.Intent;
    import android.database.Cursor;
    import android.graphics.Bitmap;
    import android.net.Uri;
    import android.os.Bundle;
    import android.provider.MediaStore;
    import android.util.Log;
    import com.unity3d.player.UnityPlayer;
    import java.io.IOException;
    //import android.view.KeyEvent;
    
    public class WebViewActivity extends Activity
    {
        public static final int NONE = 0;
        public static final int PHOTORESOULT = 3;
        public static final String IMAGE_UNSPECIFIED = "video/*"/*;"image/*"*/;//划重点,这里指定视频或图片
    
        private String LOG_TAG = "LOG_ZDQ";
        @Override
        protected void onCreate(Bundle savedInstanceState) {
    
            super.onCreate(savedInstanceState);
    
            Intent intent = new Intent(Intent.ACTION_PICK, null);
            intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, IMAGE_UNSPECIFIED);
            startActivityForResult(intent, PHOTORESOULT);
            Log.d(LOG_TAG, "打开相册!");
        }
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            Log.d(LOG_TAG, "resultCode :" + resultCode);
            if (resultCode == NONE)
            {
                if (data == null)
                {
                    this.finish();
                    UnityPlayer.UnitySendMessage("InputURL","GetPhoto","");
                }else
                {
                    if(this.isFinishing() == false)
                    {
                        this.finish();
                    }
                    UnityPlayer.UnitySendMessage("InputURL","GetPhoto","");
                }
                return;
            }
    
            if (data == null)
            {
                this.finish();
                UnityPlayer.UnitySendMessage("InputURL","GetPhoto","");
            }
    
            ContentResolver resolver = getContentResolver();
            Bitmap bm=null;
    
            Uri originalUri = data.getData();
            try {
                bm = MediaStore.Images.Media.getBitmap(resolver, originalUri);
            } catch (IOException e) {
                e.printStackTrace();
            }
    
    
            String[] proj = {MediaStore.Images.Media.DATA};
    
            Cursor cursor= getContentResolver().query(originalUri,proj,null,null,null);
            int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            cursor.moveToFirst();
            String _path = cursor.getString(column_index);
    
            UnityPlayer.UnitySendMessage("InputURL", "GetPhoto", _path);
            super.onActivityResult(requestCode, resultCode, data);
            this.finish();
        }
    }
    

    有个地方注意下,代码块中有个 “InputURL”,找不到可以复制这个然后按F12查找,这个名称是你在unity里面挂载脚本的物体名称,后面unity模块会提下
    然后不需要再修改当前app目录文件夹下其他文件,直接右键当前的总项目名称,选择New-----Module,新建一个Module
    在这里插入图片描述
    选择Android Library样式,点击Next下一步
    在这里插入图片描述
    然后点击finish完成,等几秒钟就可以编译完成,然后将app里的刚才修改和新建的脚本拷贝到新建的android library中的同样路径下
    在这里插入图片描述
    然后也同样将class.jar文件也拷贝到libs文件夹中,然后右键选择add as library,默认点确定就可以了,不用改啥,完成后是这样
    在这里插入图片描述
    然后找到新建library中的AndroidManifest.xml,打开进行修改
    在这里插入图片描述

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.Companys.Test" >
        <!--读取相册权限 (必须)-->
         <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
         <application   >
             <activity android:name=".MainActivity">
                 <intent-filter>
                     <action android:name="android.intent.action.MAIN" />
                     <category android:name="android.intent.category.LAUNCHER" />
                 </intent-filter>
             </activity>
             <activity
                 android:name=".WebViewActivity">
             </activity>
         </application>
     </manifest>
    

    将上面的代码复制到xml中,注意不要复制包名,这是我的包名,如果你的包名和我不一样,不要复制包名…
    然后找到build.gradle,如图
    在这里插入图片描述
    双击打开它进行修改(其实这我也不知道要不要修改,因为这是打jar包中的设置,而我这是打aar包…狗头)

    task makejar(type: Copy){
        //delete 'libs/test.jar'
        from('build/intermediates/packaged-classes/release/')//这个路径应该已经改了,反正我的是没有
        into('libs')
        include('classes.jar')
        rename('classes.jar','FarmGetAndroidPhoto.jar')
    }
    
    makejar.dependsOn(build)
    

    在这里插入图片描述
    改完后找到总项目结构目录下的gradle.properties文件,然后双击进行修改,如图
    在这里插入图片描述
    找到org.gradle.jvmargs这句,后面的xms可能不一样,但改它就对了,将这行代码注释掉,直接这行开头添加#号就可以了,然后保存下,接着打开androidstudio的安装目录,看看你Android Studio\bin下的studio.exe.vmoptions还是studio64.exe.vmoptions,然后打开进行修改,长这个样子的,直接对应着改就可以了

    -Xms2048m
    -Xmx2048m
    -XX:ReservedCodeCacheSize=2048m
    

    在这里插入图片描述
    编辑完以后就基本上完成了,然后选择菜单栏里的Build选项下的Rebuild project,如图
    在这里插入图片描述
    点击Rebuild project后等待一会,等构建完后打开项目目录节点下的build文件夹,子文件夹outputs,里面有个aar文件夹,下面就是已经打包好的aar文件,如图
    在这里插入图片描述
    然后将这个aar文件和图中圈住的xml一起复制出来,接下来是unity篇了,先将这两个文件放到之前unity里面建好的Plugins/android下面,然后编辑这两个文件。
    首先是xml文件,将xml的application<中添加打包后的包名,之前一直被这里坑>,设置完后保存关掉
    在这里插入图片描述
    然后用压缩工具打开aar文件,这里面的相对复杂点,首先将libs下的class.jar文件删除掉,因为这个是重复的
    在这里插入图片描述
    然后将androidmanifest.xml也删掉,外面已经有一个了
    在这里插入图片描述
    然后再双击打开这包里面的class.jar,找到最下级目录,删掉BuildConfig.class,这个在unity打包时会起冲突的,改完后然后关掉就好了,然后就是关于unity去掉用android部分了,看下面代码

    using UnityEngine;
    using System.IO;
    using UnityEngine.UI;
    using System.Collections;
    using UnityEngine.Networking;
    using UnityEngine.Video;
    using UnityEngine.Android;
    
    public class GetAndroidPhoto : MonoBehaviour
    {
        public Button button;
        public RawImage rawImage;
    
        void Start ()
        {
            button.onClick.AddListener(OpenLibery);
            Permission.RequestUserPermission(Permission.ExternalStorageRead);
            Permission.RequestUserPermission(Permission.ExternalStorageWrite);
        }
    
        private void OpenLibery()
        {
            AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
            AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
            jo.Call("TakePhoto", Application.persistentDataPath);
        }
    
        public void GetPhoto(string path)
        {
            Debug.Log("android give path ==> " + path);
            FileGetTex(path);
        }
    
        private void FileGetTex(string path)
        {
            FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read);
            fileStream.Seek(0, SeekOrigin.Begin);
            byte[] bye = new byte[fileStream.Length];
            fileStream.Read(bye, 0, bye.Length);
            fileStream.Close();
    
            Texture2D texture2D = new Texture2D((int)rawImage.rectTransform.rect.width, (int)rawImage.rectTransform.rect.height);
            texture2D.LoadImage(bye);
            rawImage.texture = texture2D;
        }
        public IEnumerator DownloadTexture(string url, RawImage rawImage)//这些都可以
        {
            using (UnityWebRequest request = UnityWebRequestTexture.GetTexture("file://" + url))
            {
                yield return request.SendWebRequest();
    
                if (request.error == null)
                {
                    Texture2D texture = (request.downloadHandler as DownloadHandlerTexture).texture;
                    rawImage.texture = texture;
                }
            }
        }
    }
    

    复制完代码后,将脚本拖到场景中指定的物体上,上面有提到过的呦,跟java代码里的名称设置一至才能调用在这里插入图片描述
    放置完后,创建canvas这些就不写,将脚本需要拖拽赋予的都放上去就KO了,然后就可以打包了,这里还有坑,那就是打包设置的Build System必须要设置为Gradle模式,否则会打包失败,而且即使选了也不一定能打包。。。。。,因为Gradle模式打包需要下载一些包,而软件本身的下载路径为国外的,所以你懂得,首先直接找到Unity2018.3.8\Unity2018\Editor\Data\PlaybackEngines\AndroidPlayer\Tools\GradleTemplates路径,路径下有三个gradle后缀文件,都打开,然后找到有repositories块的就在里面添加下面这行代码

    maven{ url 'http://maven.aliyun.com/nexus/content/repositories/central/'}
    

    改完后再用Gradle模式打包,基本就KO了,测试打开相册KO,其实打开相册选图片和视频都一样,都是返回路径,然后unity里根据路径去获取,所以要相册的读写权限,可能不一定所有都成功,我的是2018.3.8版就KO,第一次写,有点渣,请见谅…狗头

    生活不易,且行且珍惜,让自己每天过的充实些
    如需转载请注明出处,码字也不易,谢谢!

    展开全文
  • android相册3D源码

    热门讨论 2013-01-17 14:20:36
    实现android上的3D相册源码 已验证可用 用来做相册播放器挺牛X的
  • Android相册多选功能

    2018-02-01 16:39:57
    今天做开发,需要一个相册多选功能,然后就上网查了一下,看了有一个jar包,可以直接引用,就直接调用了,本来想直接写一个左右循环移动的方法,但是发现有点小麻烦,由于工作紧就不做了,终于发现一个好的程序写完...
  • Unity调用Android相册以及裁剪功能上传头像 Android部分 调用相册以及裁剪选中的图片: import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java....

    Unity调用Android相册以及裁剪功能上传头像


    1. Android部分
      调用相册以及裁剪选中的图片:
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    import com.unity3d.player.UnityPlayer;
    import com.unity3d.player.UnityPlayerActivity;
    
    import android.app.Activity;
    import android.content.Intent;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.net.Uri;
    import android.os.Build;
    import android.os.Bundle;
    import android.os.Environment;
    import android.provider.MediaStore;
    import android.util.Log;
    import android.view.Menu;
    import android.view.MenuItem;
    
    public class MainActivity extends UnityPlayerActivity {
    
    	private static final int PHOTO_REQUEST_CODE = 1;// 相册
    	public static final int PHOTORESOULT = 3;// 结果
    	private Uri cropImageUri;
    	private String gameObjectName;
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    	}
    
    	public void OpenPhoto(String name) {
    		gameObjectName = name;
    		Intent intent = new Intent(Intent.ACTION_PICK, null);
    //		Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    		intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");
    //		intent.setType("image/*");
    //		intent.putExtra("crop", "true");
    //		intent.putExtra("aspectX", 1);
    //		intent.putExtra("aspectY", 1);
    //		intent.putExtra("outputX", 100);
    //		intent.putExtra("outputY", 100);
    //		intent.putExtra("return-data", true);
    		startActivityForResult(intent, PHOTO_REQUEST_CODE);
    	}
    
    	// 读取相册缩放图片
    	public void startPhotoZoom(Uri uri) {
    		if (null == uri) {
    			Log.i("Unity", "读取相册缩放图片 ==>> uri为Null");
    		}
    		File CropPhoto = new File(getExternalCacheDir(), "crop_image.jpg");
    		try {
    			if (CropPhoto.exists()) {
    				CropPhoto.delete();
    			}
    			CropPhoto.createNewFile();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    		cropImageUri = Uri.fromFile(CropPhoto);
    //		cropImageUri = Uri.parse("file://" + "/" + Environment.getExternalStorageDirectory().getPath()
    //				+ "/Android/data/com.YouthGamer.WenZhou/cache/" + "crop_image.jpg");
    		Intent intent = new Intent("com.android.camera.action.CROP");
    		intent.setDataAndType(uri, "image/*");
    		if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    			intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // 添加这一句表示对目标应用临时授权该Uri所代表的文件
    		}
    		// 下面这个crop=true是设置在开启的Intent中设置显示的VIEW可裁剪
    		intent.putExtra("crop", "true");
    		intent.putExtra("scale", true);
    
    		intent.putExtra("aspectX", 1);
    		intent.putExtra("aspectY", 1);
    
    		intent.putExtra("outputX", 300);
    		intent.putExtra("outputY", 300);
    
    		intent.putExtra("return-data", false);
    		intent.putExtra(MediaStore.EXTRA_OUTPUT, cropImageUri);
    		// intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
    		intent.putExtra("noFaceDetection", true); // no face detection
    		Log.i("Unity", "开始缩放");
    		try {
    			startActivityForResult(intent, PHOTORESOULT);
    		} catch (Exception e) {
    			// 解决截取后部分机型秒退
    			Log.i("Unity", e.getMessage());
    			e.printStackTrace();
    			UnityPlayer.UnitySendMessage(gameObjectName, "onImagePath", "Fail");
    		}
    	}
    
    	public void SaveBitmap(Bitmap bitmap) throws IOException {
    
    		if(null == bitmap) {
    			Log.i("Unity", "SaveBitmap=>bitmap为Null");
    		}		
    		FileOutputStream fOut = null;
    		// 注解1
    		String path = "/mnt/sdcard/Android/data/com.YouthGamer.WenZhou/files";
    //		String path = "file://" + "/" + Environment.getExternalStorageDirectory().toString()
    //		+ "/Android/data/com.YouthGamer.WenZhou/files";
    		try {
    			// 查看这个路径是否存在,
    			// 如果并没有这个路径,
    			// 创建这个路径
    			File destDir = new File(path);
    			if (!destDir.exists()) {
    				destDir.mkdirs();
    			}
    			fOut = new FileOutputStream(path + "/image.jpg");
    		} catch (FileNotFoundException e) {
    			Log.i("Unity", e.getMessage());
    			e.printStackTrace();
    		}
    		// 将Bitmap对象写入本地路径中,Unity在去相同的路径来读取这个文件
    		bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fOut);
    		try {
    			fOut.flush();
    		} catch (IOException e) {
    			Log.i("Unity", e.getMessage());
    			e.printStackTrace();
    		}
    		try {
    			fOut.close();
    		} catch (IOException e) {
    			Log.i("Unity", e.getMessage());
    			e.printStackTrace();
    		}
    		Log.i("Unity", gameObjectName);
    		UnityPlayer.UnitySendMessage(gameObjectName, "onImagePath", "image.jpg");
    	}
    
    	@Override
    	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    
    		if (data == null)
    			return;
    		if (requestCode == PHOTO_REQUEST_CODE) {
    			Log.i("Unity", "选取相册图片完毕");
    			startPhotoZoom(data.getData());
    		} else if (requestCode == PHOTORESOULT) {
    			try {
    				Log.i("Unity", "缩放图片完毕,准备保存Bitmap");
    				Bitmap headShot = BitmapFactory.decodeStream(getContentResolver().openInputStream(cropImageUri));
    				SaveBitmap(headShot);
    			} catch (IOException e) {
    				Log.i("Unity", e.getMessage());
    				e.printStackTrace();
    			}
    		}
    	}
    }
    
    

    1. Unity部分

    调用部分

                //调用Android的入口方法OpenPhoto
                AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
                AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
                jo.Call("OpenPhoto", gameObject.name);
    

    接受部分

        /// <summary>
        /// android裁剪完图片进行回调
        /// </summary>
        /// <param name="imageName"></param>
        public void onImagePath(string imageName)
        {
            if (imageName.Contains("Fail"))
            {
                //失败
            }
            else
            {
                Debug.Log("更新图片-3");
                StartCoroutine(LoadImage());
            }
        }
    
        private IEnumerator LoadImage()
        {
            WWW www = new WWW("file://" + Application.persistentDataPath + "/image.jpg");
            yield return www;
            if (www.error == null)
            {
            	//开始上传头像--此处根据服务器定的协议进行上传
                StartCoroutine(setRoleImage(www.texture));
            }
            else
            {
                Debug.LogError("LoadImage>>>www.error:" + www.error);
            }
        }
    

    别忘了配置AndroidManifest:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.YouthGamer.WenZhou"
        android:versionCode="1"
        android:versionName="1.0" >
      <uses-sdk
          android:minSdkVersion="15"
          android:targetSdkVersion="23" />
    
      <application
          android:allowBackup="true"
          android:theme="@android:style/Theme.NoTitleBar"
          android:label="@string/app_name"
          android:icon="@drawable/app_icon" >
        >
        <activity
          android:name="com.YouthGamer.WenZhou.MainActivity"
          android:label="@string/app_name" >
          <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
          </intent-filter>
        </activity>
      </application>
    
      <!-- SDCard写入数据权限 -->
      <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
      <!-- 连接互联网的权限 -->
      <uses-permission android:name="android.permission.INTERNET" />
      <!-- SDCard中创建与删除文件权限 -->
      <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
    
    </manifest>
    

    结果:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • wqgallery - wqgallery实现类似微信选择照片功能,可以通过相机或相册选择,支持单张裁剪,支持单选模式、支持多选模式。
  • Qt QML 实现Android相册展示

    千次阅读 2019-05-12 14:39:00
    用QML来做一个Android手机上的相册浏览软件,支持相册列表展示,相册中相片列表展示,以及点击相片过后可以进行浏览。类似于android手机的相册功能,还支持在浏览大图时进行两指缩放,左右切换浏览。 正文 本示例...

    概述

    用QML来做一个Android手机上的相册浏览软件,支持相册列表展示,相册中相片列表展示,以及点击相片过后可以进行浏览。类似于android手机的相册功能,还支持在浏览大图时进行两指缩放,左右切换浏览。

    正文

    本示例主要为了提供一个思路,使用Qt进行相片展示。
    目前代码还在完善中,还处于一个粗糙的demo,就不进行代码展示了。
    先来看一下实际的效果:

    打开软件后直接是相册列表展示:

    点击某一个相册后打开:

    再点击某一张相片后进行大图浏览

    支持两指缩放和左右滑动:

    关键分析

    要实现这个功能,需要考虑到几个关键因素:

    获取图片信息

    通过Android原生接口,可以直接获取到手机中所有包含相片的文件夹的信息,包括相册的路径,将信息解析(相册封面、数量、名称)过后传到QML端。

    QML端实现

    只要拿到相册数据后,接下来就只要展示就好了,这里用到的关键的QML控件有:

    • 相册列表:ListView
    • 相片列表:GridView
    • 相片大图浏览:ListView
    • 相片缩放:PinchArea
    • 相册中相片解析:FolderListModel

    等待后期代码相对完善后再进行上传。

    展开全文
  • 目前Android手机上调用自己相册和拍照功能的实现
  • Android 相册选择照片或拍照获取图片系统6.0及7.0实现
  • 一个简约的Android相册(支持多选)

    万次阅读 多人点赞 2016-10-30 23:13:54
    版权声明:转载必须注明本文转自严振杰的... ... Album是一个Android开源相册,支持单/多选、缩放、预览、按文件夹查看图片,后期会考虑加入图片剪切等操作。 开发者不需要担心Android6.0的运行时权限,Album已经非...
  • 工程通过调用Android代码实现打开手机相册选择图片 选择图片为360全景图时 可以在手机端实现全景图预览 同时通过手机陀螺仪控制相机旋转
  • //刷新图片,显示到相册中 void ScanFile(string[] path) { using (AndroidJavaClass PlayerActivity = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) { AndroidJavaObject playerActivity = ...
  • android studio 开发,使用FileProvider兼容4.4版本以上文件权限读取。适配常见手机文件系统路径。
  • 解决获取相册图片路径为空的方法: 如果intent.setAction(Intent.ACTION_GET_CONTENT);话可能在4.4以后的版本机型会获取不到真实的路径,所以改成 Intent intent = new Intent(Intent.ACTION_PICK,android.provider....
  • android 相册实时更新

    千次阅读 2015-01-13 11:20:31
    具体实现为在我们的app中生产一个客户的二维码图片,然后保存到手机的默认相册中(/DCIM/Camera/)中,然后启动微信,用户可以在微信的二维码扫描中选择照片进行扫描并关注客户的微信公众微信号。可是在扫描的过程中...
  • // 相册选取 Intent intent = new Intent(Intent.ACTION_GET_CONTENT).setType("image/*"); intent.addCategory(Intent.CATEGORY_OPENABLE); intent.setDataAndType(Med
  • android相册拍照保存图片到本地

    千次阅读 2017-02-15 10:16:45
    功能:选择相册或者拍照图片保存到本地,下次打开程序直接显示,图片可裁剪。 一。新建布局: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools=...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,941
精华内容 3,176
关键字:

android相册