QQ發送圖片的UI及部分功能
1、暫時用activity 代替彈出框 本文只提供思路 並未完全實現。
package com.zhx.qqpictrue.ui;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.widget.Gallery;
import android.widget.TextView;
import android.widget.Toast;
import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import com.zhx.qqpictrue.R;
import com.zhx.qqpictrue.adapter.QQGralleryAdapter;
import com.zhx.qqpictrue.bean.ImageFloder;
public class QQPictrueActivity extends Activity implements View.OnClickListener {
private Gallery mRecyclerView;
private QQGralleryAdapter mAdapter;
private List<String> mDatas;
private ProgressDialog mProgressDialog;
/**
* 存儲文件夾中的圖片數量
*/
private int mPicsSize;
/**
* 圖片數量最多的文件夾
*/
private File mImgDir;
/**
* 所有的圖片
*/
private List<String> mImgs;
/**
* 臨時的輔助類,用於防止同一個文件夾的多次掃描
*/
private HashSet<String> mDirPaths = new HashSet<String>();
/**
* 掃描拿到所有的圖片文件夾
*/
private List<ImageFloder> mImageFloders = new ArrayList<ImageFloder>();
int totalCount = 0;
private TextView ablumTv, cameraTv, cacelTv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
mRecyclerView = (Gallery) findViewById(R.id.id_recyclerview_horizontal);
ablumTv = (TextView) findViewById(R.id.album_tv);
ablumTv.setOnClickListener(this);
cameraTv = (TextView) findViewById(R.id.camera_tv);
cameraTv.setOnClickListener(this);
cacelTv = (TextView) findViewById(R.id.cacel_tv);
cacelTv.setOnClickListener(this);
new Thread(new Runnable() {
@Override
public void run() {
getImages();
}
}).start();
}
private void getImages() {
String firstImage = null;
Uri mImageUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
ContentResolver mContentResolver = QQPictrueActivity.this
.getContentResolver();
// 只查詢jpeg和png的圖片
Cursor mCursor = mContentResolver.query(mImageUri, null,
MediaStore.Images.Media.MIME_TYPE + "=? or "
+ MediaStore.Images.Media.MIME_TYPE + "=?",
new String[] { "image/jpeg", "image/png" },
MediaStore.Images.Media.DATE_MODIFIED);
while (mCursor.moveToNext()) {
// 獲取圖片的路徑
String path = mCursor.getString(mCursor
.getColumnIndex(MediaStore.Images.Media.DATA));
Log.e("TAG", path);
// 拿到第一張圖片的路徑
if (firstImage == null)
firstImage = path;
// 獲取該圖片的父路徑名
File parentFile = new File(path).getParentFile();
if (parentFile == null)
continue;
String dirPath = parentFile.getAbsolutePath();
ImageFloder imageFloder = null;
// 利用一個HashSet防止多次掃描同一個文件夾(不加這個判斷,圖片多起來還是相當恐怖的~~)
if (mDirPaths.contains(dirPath)) {
continue;
} else {
mDirPaths.add(dirPath);
// 初始化imageFloder
imageFloder = new ImageFloder();
imageFloder.setDir(dirPath);
imageFloder.setFirstImagePath(path);
}
int picSize = parentFile.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String filename) {
if (filename.endsWith(".jpg") || filename.endsWith(".png")
|| filename.endsWith(".jpeg"))
return true;
return false;
}
}).length;
totalCount += picSize;
imageFloder.setCount(picSize);
mImageFloders.add(imageFloder);
if (picSize > mPicsSize) {
mPicsSize = picSize;
// 顯示掃描到的第一個文件目錄
if (mImgDir == null) {
mImgDir = parentFile;
}
}
}
mCursor.close();
// 掃描完成,輔助的HashSet也就可以釋放內存了
mDirPaths = null;
// 通知Handler掃描圖片完成
mHandler.sendEmptyMessage(0x110);
}
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (mImgDir == null) {
Toast.makeText(getApplicationContext(), "擦,一張圖片沒掃描到",
Toast.LENGTH_SHORT).show();
return;
}
mImgs = Arrays.asList(mImgDir.list());
Collections.reverse(mImgs);
mAdapter = new QQGralleryAdapter(QQPictrueActivity.this, mImgs,
R.layout.grid_item, mImgDir.getAbsolutePath());
mRecyclerView.setAdapter(mAdapter);
}
};
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.album_tv:
startActivity(new Intent(this, MainActivity.class));
break;
case R.id.camera_tv:
startActivity(new Intent(this, ZCameraBaseAcitivy.class));
break;
case R.id.cacel_tv:
finish();
break;
}
}
}
2、配置文件xml
<?xml version="1.0"?>
-<RelativeLayout android:layout_height="match_parent" android:layout_width="match_parent" xmlns:tools="http://schemas.android.com/tools" xmlns:android="http://schemas.android.com/apk/res/android">
-<LinearLayout android:layout_height="wrap_content" android:layout_width="match_parent" android:orientation="vertical" android:background="#333333" android:layout_alignParentBottom="true">
<Gallery android:layout_height="120dp" android:layout_width="match_parent" android:layout_marginBottom="1dp" android:spacing="5dp" android:scrollbars="none" android:layout_gravity="bottom" android:id="@+id/id_recyclerview_horizontal"/>
<TextView android:layout_height="wrap_content" android:layout_width="match_parent" android:background="#ffffff" android:layout_marginBottom="1dp" android:id="@+id/camera_tv" android:textSize="22sp" android:padding="10dp" android:textColor="#333333" android:gravity="center" android:text="相機"/>
<TextView android:layout_height="wrap_content" android:layout_width="match_parent" android:background="#ffffff" android:layout_marginBottom="1dp" android:id="@+id/album_tv" android:textSize="22sp" android:padding="10dp" android:textColor="#333333" android:gravity="center" android:text="相冊"/>
<TextView android:layout_height="wrap_content" android:layout_width="match_parent" android:background="#ffffff" android:id="@+id/cacel_tv" android:textSize="22sp" android:padding="10dp" android:textColor="#333333" android:gravity="center" android:text="取消"/>
</LinearLayout>
</RelativeLayout>