layout/imageswitch.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<ImageSwitcher
android:id="@+id/arc_hf_img_switcher"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true" />
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:gravity="center" >
<Gallery
android:id="@+id/arc_hf_img_gallery"
android:layout_width="fill_parent"
android:layout_height="60dp"
android:layout_weight="1"
android:background="#55000000"
android:gravity="center_vertical"
android:spacing="16dp" />
<Button
android:id="@+id/arc_hf_img_btnDel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="30dp"
android:text="@string/arc_hf_img_btnDel" />
<Button
android:id="@+id/arc_hf_img_btnBack"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="30dp"
android:text="@string/arc_hf_img_btnBack" />
</LinearLayout>
</RelativeLayout>
ImgSwitch.java
public class ImgSwitch extends Activity implements OnItemSelectedListener,
ViewFactory {
private final String DATABASE_PATH = Environment
.getExternalStorageDirectory().getAbsolutePath() + "/hfdatabase";
private final String DATABASE_FILENAME = "hf_database.db";
private final String TABLE_NAME = "HF_IMG_THEME";
private final String strImgPath = Environment.getExternalStorageDirectory()
.toString() + "/dlion/";// 存放照片的文件夾
private SQLiteDatabase db;
private ImageSwitcher is;
private Gallery gallery;
private Bitmap[] bitmaps;
private int[] _ids;
private String[] imgNames;
private int parentId;
public int gPosition = 0;
private int isPosition = 0;
private Button btnDel;
private Button btnBack;
// 返回鍵監聽,添加關閉數據庫功能。
public void onBackPressed() {
super.onBackPressed();
db.close();
finish();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.imageswitch);
db = openDatabase();
parentId = this.getIntent().getIntExtra("parentId", 0);
gallery = (Gallery) findViewById(R.id.arc_hf_img_gallery);
is = (ImageSwitcher) findViewById(R.id.arc_hf_img_switcher);
is.setFactory(this);
is.setInAnimation(AnimationUtils.loadAnimation(this,
android.R.anim.fade_in));
is.setOutAnimation(AnimationUtils.loadAnimation(this,
android.R.anim.fade_out));
btnDel = (Button) findViewById(R.id.arc_hf_img_btnDel);
btnBack = (Button) findViewById(R.id.arc_hf_img_btnBack);
btnDel.setOnClickListener(new btnListener());
btnBack.setOnClickListener(new btnListener());
initImgs();
}
// 按鍵監聽
class btnListener implements OnClickListener {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.arc_hf_img_btnBack:
db.close();
finish();
break;
case R.id.arc_hf_img_btnDel:
db.delete(TABLE_NAME, "_id=" + _ids[gPosition], null);
File file = new File(imgNames[gPosition]);
file.delete();
Toast.makeText(ImgSwitch.this, imgNames[gPosition] + "刪除成功",
Toast.LENGTH_SHORT).show();
initImgs();
break;
default:
break;
}
}
}
// 初始化圖片視圖
private void initImgs() {
Cursor cursorImgName = db.query(TABLE_NAME, null, "parentId = "
+ parentId, null, null, null, null);
bitmaps = new Bitmap[cursorImgName.getCount()];
imgNames = new String[cursorImgName.getCount()];
_ids = new int[cursorImgName.getCount()];
// 優化內存
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 20;
for (int i = 0; i < cursorImgName.getCount(); i++) {
cursorImgName.moveToNext();
// 保存圖片組名字、ID、完整路徑
imgNames[i] = strImgPath
+ cursorImgName.getString(cursorImgName
.getColumnIndex("imgName"));
_ids[i] = cursorImgName.getInt(cursorImgName.getColumnIndex("_id"));
bitmaps[i] = BitmapFactory.decodeFile(imgNames[i], options);
}
gallery.setAdapter(new ImageAdapter(this));
gallery.setOnItemSelectedListener(this);
if (gPosition == cursorImgName.getCount()
&& cursorImgName.getCount() >= 1) {
is.setImageURI(Uri.parse(imgNames[isPosition – 1]));
} else if (cursorImgName.getCount() == 0) { // 沒有圖片時,取消刪除鍵監聽
btnDel.setEnabled(false);
}
}
@Override
public View makeView() {
// TODO Auto-generated method stub
ImageView i = new ImageView(this);
i.setBackgroundColor(0xFF000000);
i.setScaleType(ImageView.ScaleType.FIT_CENTER);
i.setLayoutParams(new ImageSwitcher.LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
return i;
}
// 覆寫baseadapter類
public class ImageAdapter extends BaseAdapter {
private Context mContext;
public ImageAdapter(Context c) {
mContext = c;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return bitmaps.length;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
gPosition = position;
ImageView i = new ImageView(mContext);
i.setImageBitmap(bitmaps[position]);
i.setAdjustViewBounds(true);
i.setLayoutParams(new Gallery.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
return i;
}
}
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
isPosition = arg2;
is.setImageURI(Uri.parse(imgNames[arg2]));
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
// 初始化數據庫
private SQLiteDatabase openDatabase() {
try {
String databaseFilename = DATABASE_PATH + "/" + DATABASE_FILENAME;
File dir = new File(DATABASE_PATH);
if (!dir.exists())
dir.mkdir();
if (!(new File(databaseFilename)).exists()) {
InputStream is = getResources().openRawResource(
R.raw.hf_database);
FileOutputStream fos = new FileOutputStream(databaseFilename);
byte[] buffer = new byte[8192];
int count = 0;
// 開始復制hf_database.db文件
while ((count = is.read(buffer)) > 0) {
fos.write(buffer, 0, count);
}
}
db = SQLiteDatabase.openOrCreateDatabase(databaseFilename, null);
return db;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
摘自 oldfeel