2015-09-23 59 views
0

我做了一本書,其中包含140個圖像作爲頁面,每個圖像約爲40kB。由於安全性不足,我不想將它們放入Drawables Folder。所以我應該在sqlite中加載圖像並使用MikeOrtiz_TouchImageView「ViewPagerExample」類來滑動頁面和縮放頁面。從SQLite加載圖像swiper的來源

我的問題是如何從數據庫圖像加載到圖像刷卡陣列:int[] images或任何陣列(我是初學者的細節解釋,請!)

package com.ortiz.touch; 

import com.example.touch.R; 

import android.app.Activity; 
import android.os.Bundle; 
import android.support.v4.view.PagerAdapter; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.LinearLayout; 

public class ViewPagerExampleActivity extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_viewpager_example); 
     ExtendedViewPager mViewPager = (ExtendedViewPager) findViewById(R.id.view_pager); 
     mViewPager.setAdapter(new TouchImageAdapter()); 
    } 

    static class TouchImageAdapter extends PagerAdapter { 

     private static int[] images = { 
      R.drawable.nature_1, R.drawable.nature_2, R.drawable.nature_3, R.drawable.nature_4, R.drawable.nature_5 
     }; 

     @Override 
     public int getCount() { 
      return images.length; 
     } 

     @Override 
     public View instantiateItem(ViewGroup container, int position) { 
      TouchImageView img = new TouchImageView(container.getContext()); 
      img.setImageResource(images[position]); 
      container.addView(img, LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT); 
      return img; 
     } 

     @Override 
     public void destroyItem(ViewGroup container, int position, Object object) { 
      container.removeView((View) object); 
     } 

     @Override 
     public boolean isViewFromObject(View view, Object object) { 
      return view == object; 
     } 

    } 
} 

是否有也只是那些解釋什麼建議?

+0

改進格式 – uri2x

+0

設置它'因爲安全lack'的意思是你想它更難以竊取你的圖片?你需要關於加密/解密圖像的幫助嗎? – k3b

+0

是的,我選擇使用sqlcipher加密它的數據庫。你還有其他建議嗎? – Pingman98

回答

0

保存到數據庫: bitmap to byte []; user image: byte [] to bitmap; 但它沒用; 人們可以得到你的來源,如果他們想要的話;

0

你可以從數據庫獲取圖像作爲Blob和可以轉換成位圖陣列

String query = "SELECT * FROM '" + tablename+ "'"; 
     Cursor tileCursor = database.rawQuery(query,null);//create a database object 
    ArrayList<Bitmap> images=new ArrayList<Bitmap>(); 

    while(!tileCursor.isAfterLast()) 
    { 
    byte[] bitmapdata =tileCursor.getBlob(tileCursor.getColumnIndex("Imagecolumnname")); 
    Bitmap bitmap = BitmapFactory.decodeByteArray(bitmapdata , 0, bitmapdata .length); 
    images.Add(bitmap); 
    tileCursor.moveToNext(); 
    } 

然後使用

@Override 
    public View instantiateItem(ViewGroup container, int position) { 
     TouchImageView img = new TouchImageView(container.getContext()); 
     img.setImageBitmap(images.get(position)); 
     container.addView(img, LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT); 
     return img; 
    } 
+0

謝謝rajan ...我最測試它,但你認爲,因爲使用圖像swiper我需要緩衝區,例如4位圖,以防止抖動?或者簡單地通過每個swip加載適當的位圖? – Pingman98

+0

每次它加載位圖,並避免OutOfMemoryException你也可以在添加到列表之前壓縮位圖 –

+0

'while(rs.read())'是什麼? – Pingman98