Android之相册实现

本文介绍了如何使用RecyclerView实现一个相册功能,通过getLoaderManager().initLoader查询系统相册并展示。同时,文章指出原始代码中视频加载缓慢的问题,并推荐使用LRUCache进行缓存优化。
摘要由CSDN通过智能技术生成

本文主要记录一些零碎的东西

使用recycleeView实现一个相册,相册里面的编辑可以参考这篇,主要是扫描系统相册,然后展示出来



主要是使用 getLoaderManager().initLoader 查询数据库,其实遍历文件也是可以的,不过偷懒啦,而且提供的查询是异步的

看看list界面

/**
 * 相册列表
 * Create by slack on 2016/09/06 15:58
 */
public class AlbumListActivity extends BaseFullScreenActivity {

    private RecyclerView mRecyclerView;
    private Boolean isVideo;
    private TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_album_list);

        initView();
        initData();

    }

    private void initData() {

        if(getIntent() != null ){
            isVideo =  getIntent().getBooleanExtra("video",false);
        }

        mHandler = new Handler(){
            @Override
            public void handleMessage(Message msg) {
                if(msg.what == REQ_SACN_ALBUM_LIST){
                    mRecyclerView.setVisibility(View.VISIBLE);
                    mRecyclerView.setAdapter(
                            new AlbumListAdapter(mRecyclerView,albumImageList,itemClickListener));
                    // 进入第一个 相册详情界面
                    /***
                     * 发现会有一个假死的现象,从相册返回后整个界面无法点击
                     * so 来个延时
                     */
                    mHandler.postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            // 点击视频首打开视频,点击照片首打开照片
                            for (int i = 0; i < albumImageList.size(); i++) {
                                AlbumImage a = albumImageList.get(i);
                                if(isVideo && a.imagePath.startsWith("v")){
                                    enterAlbumView(i);
                                    break;
                                }else if(!isVideo && a.imagePath.startsWith("i")){
                                    enterAlbumView(i);
                                    break;
                                }
                            }

                        }
                    }, 100);

                }
            }
        };

        // 虽然使用了 getLoaderManager ,结果操作在主线程里跑
        initAlbumImages(mHandler);

    }


    private void initView() {
        mRecyclerView = (RecyclerView) findViewById(R.id.album_list);

        textView = (TextView) findViewById(R.id.album_scanning);
        textView.setVisibility(View.VISIBLE);

        ((TextView)findViewById(R.id.top_center)).setText(getString(R.string.album_choose));
        ((ImageView)findViewById(R.id.top_left)).setImageResource(R.drawable.home_red);
        findViewById(R.id.top_left).setOnClickListener(this);
        ((ImageView)findViewById(R.id.top_right)).setImageResource(R.drawable.home_red);
        findViewById(R.id.top_right).setOnClickListener(this);

        mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
        mRecyclerView.setVisibility(View.GONE);
    }

    AlbumListAdapter.ItemClickListener itemClickListener = new AlbumListAdapter.ItemClickListener() {
        @Override
        public void onItemClick(int pos) {
            if(pos >= 0 && pos < albumImageList.size()){
                enterAlbumView(pos);
            }
        }
    };

    private void enterAlbumView(int position){
        textView.setVisibility(View.GONE);
        List<String> childList = mGruopMap.get(albumImageList.get(position).folderName);
//        if(childList.get(0).endsWith("gif")){
//            startNewActivity(PhotoSelectActivity.class,false);
//        }else
        {
            Intent mIntent = new Intent(AlbumListActivity.this, AlbumImagesActivity.class);
            mIntent.putStringArrayListExtra("list", (ArrayList<String>) childList);
            startActivity(mIntent);
        }
    }

主要是 base里的查询

public abstract class BaseFullScreenActivity 
{

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

    }

   

    protected final int REQ_SACN_ALBUM_LIST = 0x01;
    // 一个文件夹,下面好多文件  父目录名 : 子文件list(文件路径)
    protected Map<String, List<String>> mGruopMap = new HashMap<>();
    private final lo
  • 6
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值