标签: android-gallery

Android:自定义图库 setSelection() 问题

我有一个扩展的 BaseAdapter,它的 LinearLayout 子项(每个子项中有一个 ImageView 和一个 TextView)连接到自定义图库。

当我第一次启动我的活动时,我想调用setSelection(position)使 ImageView 将其选择器更改为“选定”图像。一旦我在随后选定的孩子上扔画廊,这就会起作用,但不是第一次启动应用程序。

我的选择器:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" 
    android:drawable="@drawable/home_image_select" /> 
<item android:state_selected="false" 
    android:drawable="@drawable/home_image" /> 
</selector>
Run Code Online (Sandbox Code Playgroud)

我的第一个猜测是在调用 setSelection() 之后在适配器上调用 notifyDataSetChanged(),我尝试这样做:

((CustomAdapter) gallery.getAdapter()).notifyDataSetChanged();
Run Code Online (Sandbox Code Playgroud)

那没有任何作用。我还尝试覆盖 Gallery 类的 setSelection() 来执行此操作:

View v = this.getAdapter().getView(position, null, this);       
((ImageView) v.findViewById(R.id.gallery_image)).setSelected(true);
Run Code Online (Sandbox Code Playgroud)

那也行不通。有什么我想念的或可以尝试的吗?

java android android-widget android-gallery android-adapter

5
推荐指数
0
解决办法
1568
查看次数

ViewPager +回收视图?

我想创建一个左右滑动的照片库.起初我看了看Gallery,但它被标记为已弃用.

http://developer.android.com/reference/android/widget/Gallery.html

我们被告知要尝试ViewPager.但该PagerAdapter课程不处理我们的观点回收(如标准ListView),是吗?

http://developer.android.com/reference/android/support/v4/view/PagerAdapter.html

我们是否应该建立回收机制?

谢谢

android android-gallery android-viewpager

5
推荐指数
1
解决办法
7543
查看次数

如何设置意图过滤器只接受jpg?

我希望我的 Activity 可以接受 Gallery 的 jpg。所以我设置

Intent picker = new Intent (Intent.ACTION_PICK);
picker.setType ("image/jpeg");
Run Code Online (Sandbox Code Playgroud)

但画廊仍然显示所有格式的图像。我怎样才能让画廊只显示我需要的东西?是否需要自定义图库?

android intentfilter android-gallery mime-types

5
推荐指数
0
解决办法
462
查看次数

图库:选定项目中的效果

我需要一起滚动项目,所选项目应该向下扩展一部分.

在此输入图像描述

我目前正在使用一个Gallery(我尝试使用viewflow和viewpager,但这些项目之间有很大的空间),但我需要知道如何才能实现此效果.

我有2个想法,但我不知道如何实现它.

1)可扩展部分是LinearLayout,其中visibility = gone,当选择该项时,此布局应该是可见的.(图库没有"onItemSelectedListener")

2)将每个元素视为一个片段(一旦我使用一个使用它的Viewpager, https://github.com/mrleolink/SimpleInfiniteCarousel)

它不一定是画廊,任何想法都是受欢迎的

我正在开展一项活动.

android android-gallery android-viewpager

5
推荐指数
1
解决办法
737
查看次数

如何与文件系统同步文件重命名/删除

在使用 Android 文件系统时,我可能注意到一个我无法真正向自己解释的问题。使用File.renameTo()or更改图像File.delete()(无论图像是否有任何Exif数据)会产生以下结果(上面提到的方法返回true):

  • File.renameTo():图库仍然通过详细信息显示旧名称,并且下面发布的方法也返回一个空缩略图(当然,因为路径指向应该删除的文件)
  • File.delete():图像已从文件系统中消失(许多经过测试的文件浏览器都不再显示它并new File(pathToDeletedImage).exists()返回false),但图库仍然显示该图像,包括。所有细节

问题:我是否需要以某种方式通知图库有关我刚刚对图像文件执行的更改?

我用来获取缩略图的方法:

    private Bitmap getThumbnail(ContentResolver cr, String path)
        throws Exception {

    Cursor ca = cr.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
            new String[] { MediaStore.MediaColumns._ID },
            MediaStore.MediaColumns.DATA + "=?", new String[] { path },
            null);
    if (ca != null && ca.moveToFirst()) {
        int id = ca.getInt(ca.getColumnIndex(MediaStore.MediaColumns._ID));
        ca.close();
        return MediaStore.Images.Thumbnails.getThumbnail(cr, id,
                MediaStore.Images.Thumbnails.MICRO_KIND, null);
    }

    ca.close();
    return null;
}
Run Code Online (Sandbox Code Playgroud)

更新

好吧,我发现我们需要将所有文件更改与文件系统同步。我的猜测是,类似File.delete()和 的操作File.renameTo()在 Linux 级别上工作,但上面也有 …

filesystems android android-gallery android-file

5
推荐指数
1
解决办法
2821
查看次数

将图像文件从 Android 内部存储复制到图库

我有一个相机应用程序,在用户拍摄图像后,我将其保存到我创建的目录中的内部存储中。一切正常,图像保存在那里,我可以加载它并在之后显示,但我也无法将图像保存到 Android 画廊。

我想要的是将图像保存到内部目录后,将其复制到图库。

我试过这个:

    ContentValues values = new ContentValues();
    values.put(MediaStore.Images.Media.DATE_TAKEN, System.currentTimeMillis());
    values.put(MediaStore.Images.Media.MIME_TYPE, "image/png");
    values.put(MediaStore.Images.Media.SIZE, file.length());
    values.put(MediaStore.Images.Media.DATA, file.getAbsolutePath());

    context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
Run Code Online (Sandbox Code Playgroud)

文件是我保存在内部存储中的图像。使用这种方法,我得到的只是图库中的损坏图像。

android android-gallery

5
推荐指数
1
解决办法
2339
查看次数

如果选择了从图库或视频中选择图像,请在onActivityResult中识别 - Android

我使用以下代码从图库中选择图片或视频:

    imgGallery.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent pickPhoto = new Intent(Intent.ACTION_GET_CONTENT);
                    pickPhoto.setType("*/*");
                    String[] mimetypes = {"image/*", "video/*"};
                    pickPhoto.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes);
                    startActivityForResult(pickPhoto,
                            SELECT_PICTURE_OR_VIDEO);
                }
            });
Run Code Online (Sandbox Code Playgroud)

请注意我使用相同的按钮进行图像或视频选择.因此,当调用onActivityResult时,有什么方法可以让我知道选择了图像或从图库中选择了视频?

android android-gallery android-image onactivityresult

5
推荐指数
2
解决办法
3806
查看次数

如何打开图库以选择多个图像?

我想打开具有多个图像选择功能的图库,我正在使用以下代码。

        Intent intent = new Intent();
        intent.setType("image/*");
        intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(Intent.createChooser(intent,"Select Picture"), 1);
Run Code Online (Sandbox Code Playgroud)

它打开图库应用程序,但不允许我选择多个图像。

android android-intent android-gallery

5
推荐指数
2
解决办法
1万
查看次数

如何以编程方式创建“.nomedia”文件并在其中存储图像?

对于我的应用程序,图像存储在我手机的内部存储器中,图像在图库中可见,但我的客户希望图像在图库中不可见。

我在存储图像的文件夹中手动添加了 .nomedia 文件,它消失了,但我再次拍摄了新图像,它在图库中可见。

那么我该如何以编程方式做到这一点,以便图像不会出现在我的画廊中呢?

这是我的代码。

public  void onActivityResult(int requestCode, int resultCode, Intent data){
super.onActivityResult(requestCode, resultCode,data);

if(resultCode== Activity.RESULT_OK){

    if(requestCode==REQUEST_CAMERA){
        Uri selectedImageUri = data.getData();
        if (null != selectedImageUri) {
            // Get the path from the Uri

            String path = getPathFromURI(selectedImageUri);
            File file = new File(path);
            Bitmap  bmp = CommonMethod.compressImage(file, getContext());
            Log.e(TAG, "onActivityResult --: "+ String.format("Size : %s", getReadableFileSize(file.length())));

            mCustomerImage =  CommonMethod.bitmapToByteArray(bmp);
            imageTemplateStr = Base64.encodeToString(mCustomerImage, Base64.DEFAULT);
            Log.e(TAG, "image: "+ imageTemplateStr );
            imageCustomer.setImageBitmap(bmp);
        }

    }else if(requestCode==SELECT_FILE){
        Uri selectedImageUri = data.getData();
        if (null != …
Run Code Online (Sandbox Code Playgroud)

java android android-gallery

5
推荐指数
2
解决办法
3219
查看次数

将图片保存到共享图片文件夹 android target api 29

我的目标是从相机应用程序请求图片,将其保存在我的应用程序数据中,并将相同的图片写入图库,因此如果用户删除应用程序,它仍然保留拍摄的照片(与信使不同,我们的实用工具图片即使没有应用程序)。

我面临的问题与 29 API 级别女巫密切相关是构建目标(提供降级是不可接受的)。

所以基本上我得到的是:

第一个问题:即使Manifest.permission.WRITE_EXTERNAL_STORAGE授予我也无法访问使用Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)我得到 IOException构造的文件(权限被拒绝)

第二个问题contentResolver.insert(contentUri, contentValues)在预 Q 设备(诺基亚 8 Android Pie)上抛出这个:

java.lang.SecurityException: Permission Denial: writing com.android.providers.media.MediaProvider uri content://media/external/images/media from .... requires android.permission.WRITE_EXTERNAL_STORAGE, or grantUriPermission()
Run Code Online (Sandbox Code Playgroud)

如果我在 Android 10 设备(在我的情况下为模拟器)上运行,则使用选项可以contentResolver.insert(..)正常工作。

主要问题是如何在定位 29Api 级别时将图片正确写入 android 管理的图库文件夹,以便它可以在 android 10 之前的设备上使用?

额外参考

我用于将图片从我的应用缓存存储写入 android 10 画廊的代码是:

    fun writePictureToGalleryQ(context: Context, pictureUri: Uri, pictureName: String) {

        val contentResolver = context.contentResolver

        val relativeLocation = "${Environment.DIRECTORY_PICTURES}${File.separator}WaiJuDuDisAndroid"

        val contentValues  = ContentValues().apply {
            put(MediaStore.Images.ImageColumns.DISPLAY_NAME, pictureName)
            put(MediaStore.MediaColumns.MIME_TYPE, …
Run Code Online (Sandbox Code Playgroud)

media android android-gallery android-permissions

5
推荐指数
1
解决办法
3446
查看次数