2011-10-26 20 views
1

私はいくつかのイメージをsdcardに保存しているプロジェクトに取り組んでいます。このイメージを表示するためにビューフローを作成する必要があります。私はsdCardのIDで画像を取得しています。私の問題は今はさまざまな画像をスワイプする方法です。sdcardからアンドロイドビューフロースワイプイメージ

import java.io.File; 
import java.util.ArrayList; 

import android.app.Activity; 
import android.content.Intent; 
import android.content.res.Configuration; 
import android.database.Cursor; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.os.Bundle; 
import android.os.Environment; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ImageButton; 

public class Cards extends Activity { 

    public Cursor cursor; 
    int position; 
    int indexxx; 
    Bitmap b; 
    int objectId; 
    int cardsId; 

    private ViewFlow viewFlow; 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.circle_layout); 
     UserDatabaseHelper userDbHelper = new UserDatabaseHelper(this, null, 1); 
     userDbHelper.initialize(this); 


     final int cardId = getIntent().getIntExtra("card_id",0); 
     Log.i("Card Id ","Card Id : "+cardId); 
     final int collId = getIntent().getIntExtra("collection_id",0); 
     Log.i("Collection Id ","Collection Id : "+collId); 

     position = getIntent().getIntExtra("position",0); 
     Log.i("position","position : "+position); 

     String cardSQL = "SELECT cm.objectId "+ 
     "FROM cardmedias AS cm "+ 
     "INNER JOIN cards AS cd "+ 
     "ON (cm.cardId = cd.objectId) "+ 
     "WHERE cd.collectionId="+collId; 

     Cursor cards = userDbHelper.executeSQLQuery(cardSQL); 
     if (cards.getCount() == 0) { 
      Log.i("", "No Image file"); 
      cards.close(); 
     } else if (cards.getCount() > 0) { 
      for (cards.move(0); cards.moveToNext(); cards.isAfterLast()) { 
       cardsId = Integer.parseInt(cards.getString(cards 
         .getColumnIndex("objectId"))); 
       Log.i("", "cards objectId : " + cardsId); 

       String path = Environment.getExternalStorageDirectory() 
         + "/.Stampii/MediaCard/" + cardsId + ".png"; 
       Log.i("", "path : " + path); 
      } 
     } 

     String sql = "SELECT objectId FROM cardmedias WHERE cardId=" + cardId 
       + " LIMIT 1"; 
     Cursor cursor = userDbHelper.executeSQLQuery(sql); 
     if (cursor.getCount() == 0) { 
      Log.i("", "No Image file"); 
      cursor.close(); 
     } else if (cursor.getCount() > 0) { 
      for (cursor.move(0); cursor.moveToNext(); cursor.isAfterLast()) { 
       objectId = Integer.parseInt(cursor.getString(cursor 
         .getColumnIndex("objectId"))); 
       Log.i("", "objectId : " + objectId); 
      } 
     } 



     Button info = (Button) findViewById(R.id.info_button); 
     info.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(Cards.this, SingleCardInfo.class); 
       intent.putExtra("card_id", cardId); 
       intent.putExtra("collection_id", collId); 
       startActivity(intent); 
      } 
     }); 

     Button back = (Button) findViewById(R.id.back_button); 
     back.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       finish(); 
      } 
     }); 

     final ArrayList<Bitmap> images = new ArrayList<Bitmap>(); 
     String path = Environment.getExternalStorageDirectory()+"/.Stampii/MediaCard/"+objectId+".png"; 

     BitmapFactory.Options options = new BitmapFactory.Options(); 
     options.inTempStorage = new byte[16*1024]; 

     Bitmap b = BitmapFactory.decodeFile(path, options); 
     images.add(b); 

     viewFlow = (ViewFlow) findViewById(R.id.viewflow); 
     viewFlow.setAdapter(new ImageAdapter(this, images),position); 


     ImageButton prevBtn = (ImageButton) findViewById(R.id.previous_button); 
     prevBtn.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       indexxx = viewFlow.getSelectedItemPosition()-1; 
       if (indexxx>=0) { 
        viewFlow.setAdapter(new ImageAdapter(Cards.this, images),indexxx); 
        viewFlow.setSelectedItemPosition(indexxx); 
        Log.i("indexxx", "indexxx : " + indexxx); 
       } 
      } 
     }); 

     ImageButton nextBtn = (ImageButton) findViewById(R.id.next_button); 
     nextBtn.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       indexxx = viewFlow.getSelectedItemPosition()+1; 
       if (indexxx<=images.size()) { 
        viewFlow.setAdapter(new ImageAdapter(Cards.this, images),indexxx); 
        viewFlow.setSelectedItemPosition(indexxx); 
        Log.i("indexxx", "indexxx : " + indexxx); 
       } 
      } 
     }); 

    } 
    @Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 
     viewFlow.onConfigurationChanged(newConfig); 
    } 

} 

そして、ここでは私のImageAdapterクラスです:

import java.util.ArrayList; 

import android.content.Context; 
import android.graphics.Bitmap; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.ImageView; 

public class ImageAdapter extends BaseAdapter { 

    private LayoutInflater mInflater; 
    private ArrayList<Bitmap> ids = new ArrayList<Bitmap>(); 
    private Bitmap bitmap; 

    public ImageAdapter(Context context, ArrayList<Bitmap> images) { 
     mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     ids = images; 
    } 

    @Override 
    public int getCount() { 
     return 1; 
    } 

    @Override 
    public Object getItem(int position) { 
     return position; 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     if (convertView == null) { 
      convertView = mInflater.inflate(R.layout.image_item, null); 
     } 
     ((ImageView) convertView.findViewById(R.id.imgView)).setImageBitmap(ids.get(position)); 
     return convertView; 
    } 

} 

私が見つけ、データベースからそれのIDを取得することにより、次または前の画像を設定することができますどのように任意のアイデアをここで私が使用しているコードがありますその名前の画像をビューフローとスワイプに追加します。私は誰かが私の代わりにコードを書くことを望んでいません...私はこのことをどうやってできるのかという考えにこだわっています...誰かが提案やアイデアなどで私を助けることができるならば、

ありがとうございます!

答えて

0

が、私はこの問題を解決する方法である:ここ

import java.util.ArrayList; 
import java.util.HashMap; 

import com.stampii.stampii.R; 
import com.stampii.stampii.comm.rpc.UserDatabaseHelper; 

import android.app.Activity; 
import android.content.Intent; 
import android.content.res.Configuration; 
import android.database.Cursor; 
import android.graphics.Bitmap; 
import android.os.Bundle; 
import android.os.Environment; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ImageButton; 

public class Cards extends Activity { 

    public Cursor cursor; 
    int indexxx; 
    Bitmap b; 
    int objectId; 
    int cardsId; 
    ArrayList<Integer> ids; 
    String path; 
    int mediaType = 5001; 
    ArrayList<String> images; 
    int card; 
    String cardSQL; 

    private ViewFlow viewFlow; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.circle_layout); 
     UserDatabaseHelper userDbHelper = new UserDatabaseHelper(this, null, 1); 
     userDbHelper.initialize(this); 
     HashMap<Integer, String> hm = new HashMap<Integer, String>(); 
     ids = new ArrayList<Integer>(); 
     images = new ArrayList<String>(); 

     /* 
     * Card ID - Getting the right card 
     */ 
     final int cardId = getIntent().getIntExtra("card_id", 0); 
     Log.i("Card Id ", "Card Id CARDS : " + cardId); 

     /* 
     * Collection ID - Getting the right Collection Cards 
     */ 
     final int collId = getIntent().getIntExtra("collection_id", 0); 
     Log.i("Collection Id ", "Collection Id : " + collId); 

     // Position of Clicked Item 
     int position = getIntent().getIntExtra("position", 0); 
     Log.i("position", "position : " + position); 

     /* 
     * Indicating which activity is opening this one for selecting the right 
     * cards from Database. Value 1 : All Stampii - listing all owned 
     * stampii cards Value 2 : Owned Stampii - listing all owned stampii 
     * cards Value 3 : Repeated Stampii - listing only repeated stampii 
     * cards Value 4 : Last Acquired - listing the last acquired stampii 
     * cards 
     */ 
     int activity = getIntent().getIntExtra("activity", 1); 
     Log.d("", "activity : " + activity); 

     /* 
     * Indicating the Sort Type : Value 1 : Sort by Tags Value 2 : Sort by 
     * Categories Value 3 : Sort by Date 
     * By Default the sort type is by Tags! (Bad-Ass Muthaphucka) 
     */ 
     int sort = getIntent().getIntExtra("sort_type", 1); 
     Log.d("", "sort type : " + sort); 

     int extra = getIntent().getIntExtra("extra", 0); 
     Log.d("", "extra : " + extra); 

     switch (activity) { 
     case 1: // All Stampii 
       cardSQL = getOwnedCards(sort, collId, extra); 
      break; 
     case 2: // Owned Stampii 
       cardSQL = getOwnedCards(sort, collId, extra); 
      break; 
     case 3: // Repeated Stampii 
       cardSQL = getRepeatedCards(sort, collId, extra); 
      break; 
     case 4: // Last Acquired 
       cardSQL = getOwnedCards(sort, collId, extra); 
      break; 
     } 

     Cursor cards = userDbHelper.executeSQLQuery(cardSQL); 
     if (cards.getCount() == 0) { 
      cards.close(); 
     } else if (cards.getCount() > 0) { 
      for (cards.move(0); cards.moveToNext(); cards.isAfterLast()) { 
       cardsId = Integer.parseInt(cards.getString(cards 
         .getColumnIndex("objectId"))); 

       card = Integer.parseInt(cards.getString(cards 
         .getColumnIndex("cardId"))); 

       String path = Environment.getExternalStorageDirectory() 
         + "/.Stampii/MediaCard/" + cardsId + ".png"; 
       ids.add(card); 
       hm.put(cardsId, path); 

       path = hm.get(cardsId); 
       images.add(path); 
      } 
     } 

     Button back = (Button) findViewById(R.id.back_button); 
     back.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       finish(); 
      } 
     }); 

     viewFlow = (ViewFlow) findViewById(R.id.viewflow); 
     viewFlow.setAdapter(new ImageAdapter(this, images), position); 

     ImageButton prevBtn = (ImageButton) findViewById(R.id.previous_button); 
     prevBtn.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       indexxx = viewFlow.getSelectedItemPosition() - 1; 
       if (indexxx >= 0) { 
        viewFlow.setAdapter(new ImageAdapter(Cards.this, images), 
          indexxx); 
        viewFlow.setSelectedItemPosition(indexxx); 
        Log.i("indexxx", "indexxx : " + indexxx); 
       } 
      } 
     }); 

     ImageButton nextBtn = (ImageButton) findViewById(R.id.next_button); 
     nextBtn.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       indexxx = viewFlow.getSelectedItemPosition() + 1; 
       if (indexxx < images.size()) { 
        viewFlow.setAdapter(new ImageAdapter(Cards.this, images), 
          indexxx); 
        viewFlow.setSelectedItemPosition(indexxx); 
        Log.i("indexxx", "indexxx : " + indexxx); 
       } 
      } 
     }); 

     Button info = (Button) findViewById(R.id.info_button); 
     info.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(Cards.this, SingleCardInfo.class); 
       intent.putExtra("card_id", 
         ids.get(viewFlow.getSelectedItemPosition())); 
       intent.putExtra("collection_id", collId); 
       startActivity(intent); 
      } 
     }); 
    } 

    @Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 
     viewFlow.onConfigurationChanged(newConfig); 
    } 

    public String getOwnedCards(int sort, int collId, int extra) { 
     String sql = ""; 
     switch (sort) { 
     case 1: // Sort by Tags 
      if (extra != 0) 
       sql = "SELECT DISTINCT cm.cardId, cm.objectId " 
         + "FROM cardmedias AS cm " + "INNER JOIN cards AS cd " 
         + "ON (cm.cardId = cd.objectId) " 
         + "INNER JOIN cardtags AS ct " 
         + "ON (cd.objectId = ct.cardId) " 
         + "INNER JOIn tags AS tg " 
         + "ON (tg.objectId = ct.tagId) " 
         + "WHERE cd.collectionId=" + collId 
         + " AND cm.mediaType=" + mediaType 
         + " AND tg.objectId=" + extra; 
      else if (extra == 0) 
       sql = "SELECT DISTINCT cm.cardId, cm.objectId " 
         + "FROM cardmedias AS cm " + "INNER JOIN cards AS cd " 
         + "ON (cm.cardId = cd.objectId) " 
         + "INNER JOIN cardtags AS ct " 
         + "ON (cd.objectId = ct.cardId) " 
         + "INNER JOIn tags AS tg " 
         + "ON (tg.objectId = ct.tagId) " 
         + "WHERE cd.collectionId=" + collId 
         + " AND cm.mediaType=" + mediaType; 
      break; 
     case 2: // Sort by Categories 
      if (extra != 0) 
       sql = "SELECT DISTINCT cm.cardId, cm.objectId " 
        + "FROM cardmedias AS cm " + "INNER JOIN cards AS cd " 
        + "ON (cm.cardId = cd.objectId) " 
        + "INNER JOIN categories AS cats " 
        + "ON (cd.categoryId = cats.objectId) " 
        + "WHERE cd.collectionId=" + collId 
        + " AND cm.mediaType=" + mediaType 
        + " AND cats.objectId=" + extra; 
      else if (extra == 0) 
       sql = "SELECT DISTINCT cm.cardId, cm.objectId " 
        + "FROM cardmedias AS cm " + "INNER JOIN cards AS cd " 
        + "ON (cm.cardId = cd.objectId) " 
        + "INNER JOIN categories AS cats " 
        + "ON (cd.categoryId = cats.objectId) " 
        + "WHERE cd.collectionId=" + collId 
        + " AND cm.mediaType=" + mediaType; 
      break; 
     case 3: // Sort by Date 
      String ASCDESC = getIntent().getStringExtra("ascdesc"); 
      if (extra != 0) 
       sql = "SELECT DISTINCT cm.cardId, cm.objectId " 
        + "FROM cardmedias AS cm " + "INNER JOIN cards AS cd " 
        + "ON (cm.cardId = cd.objectId) " 
        + "INNER JOIN categories AS cats " 
        + "ON (cd.categoryId = cats.objectId) " 
        + "WHERE cd.collectionId=" + collId 
        + " AND cm.mediaType=" + mediaType 
        + " ORDER BY cd.dateCreated " + ASCDESC; 
      else if (extra == 0) 
       sql = "SELECT DISTINCT cm.cardId, cm.objectId " 
        + "FROM cardmedias AS cm " + "INNER JOIN cards AS cd " 
        + "ON (cm.cardId = cd.objectId) " 
        + "INNER JOIN categories AS cats " 
        + "ON (cd.categoryId = cats.objectId) " 
        + "WHERE cd.collectionId=" + collId 
        + " AND cm.mediaType=" + mediaType; 
      break; 
     } 
     return sql; 
    } 

    public String getRepeatedCards(int sort, int collId, int extra){ 
     String sql=""; 
     switch (sort) { 
     case 1: // Sort by Tags 
      if (extra != 0) 
       sql = "SELECT DISTINCT cm.cardId, cm.objectId " 
         + "FROM cardmedias AS cm " + "INNER JOIN cards AS cd " 
         + "ON (cm.cardId = cd.objectId) " 
         + "INNER JOIN cardtags AS ct " 
         + "ON (cd.objectId = ct.cardId) " 
         + "INNER JOIn tags AS tg " 
         + "ON (tg.objectId = ct.tagId) " 
         + "WHERE cd.collectionId=" + collId 
         + " AND cd.repeatsCount>1" 
         + " AND cm.mediaType=" + mediaType 
         + " AND tg.objectId=" + extra; 
      else if (extra == 0) 
       sql = "SELECT DISTINCT cm.cardId, cm.objectId " 
         + "FROM cardmedias AS cm " + "INNER JOIN cards AS cd " 
         + "ON (cm.cardId = cd.objectId) " 
         + "INNER JOIN cardtags AS ct " 
         + "ON (cd.objectId = ct.cardId) " 
         + "INNER JOIn tags AS tg " 
         + "ON (tg.objectId = ct.tagId) " 
         + "WHERE cd.collectionId=" + collId 
         + " AND cd.repeatsCount>1" 
         + " AND cm.mediaType=" + mediaType; 
      break; 
     case 2: // Sort by Categories 
      if (extra != 0) 
       sql = "SELECT DISTINCT cm.cardId, cm.objectId " 
        + "FROM cardmedias AS cm " + "INNER JOIN cards AS cd " 
        + "ON (cm.cardId = cd.objectId) " 
        + "INNER JOIN categories AS cats " 
        + "ON (cd.categoryId = cats.objectId) " 
        + "WHERE cd.collectionId=" + collId 
        + " AND cd.repeatsCount>1" 
        + " AND cm.mediaType=" + mediaType 
        + " AND cats.objectId=" + extra; 
      else if (extra == 0) 
       sql = "SELECT DISTINCT cm.cardId, cm.objectId " 
        + "FROM cardmedias AS cm " + "INNER JOIN cards AS cd " 
        + "ON (cm.cardId = cd.objectId) " 
        + "INNER JOIN categories AS cats " 
        + "ON (cd.categoryId = cats.objectId) " 
        + "WHERE cd.collectionId=" + collId 
        + " AND cd.repeatsCount>1" 
        + " AND cm.mediaType=" + mediaType; 
      break; 
     case 3: // Sort by Date 
      String ASCDESC = getIntent().getStringExtra("ascdesc"); 
      Log.d("","ASCDESC : "+ASCDESC); 
      if (extra != 0) 
       sql = "SELECT DISTINCT cm.cardId, cm.objectId " 
        + "FROM cardmedias AS cm " + "INNER JOIN cards AS cd " 
        + "ON (cm.cardId = cd.objectId) " 
        + "INNER JOIN categories AS cats " 
        + "ON (cd.categoryId = cats.objectId) " 
        + "WHERE cd.collectionId=" + collId 
        + " AND cd.repeatsCount>1" 
        + " AND cm.mediaType=" + mediaType 
        + " ORDER BY cd.dateCreated " + ASCDESC; 
      else if (extra == 0) 
       sql = "SELECT DISTINCT cm.cardId, cm.objectId " 
        + "FROM cardmedias AS cm " + "INNER JOIN cards AS cd " 
        + "ON (cm.cardId = cd.objectId) " 
        + "INNER JOIN categories AS cats " 
        + "ON (cd.categoryId = cats.objectId) " 
        + "WHERE cd.collectionId=" + collId 
        + " AND cd.repeatsCount>1" 
        + " AND cm.mediaType=" + mediaType; 
      break; 
     } 
     return sql; 
    } 

} 
2

私はあなたがそれをうまく動作させるのに非常に近いと思います。

getCount()は次のようにする必要があります。

@Override 
public int getCount() { 
    return ids.size(); 
} 

EDITED
あなたはonClick内の新しいインスタンスを作成している、ImageAdapterのインスタンスを1つだけ作成する必要があります。またsetSelectedItemPosition()の代わりにsetSelection()を使用する必要があります。後者は内部のために意図されているようだ。ここでは

 @Override 
     public void onClick(View v) { 
      indexxx = viewFlow.getSelectedItemPosition()-1; 
      if (indexxx>=0) { 
       viewFlow.setSelection(indexxx); 
       Log.i("indexxx", "indexxx : " + indexxx); 
      } 
     } 
     /* ... */ 
     @Override 
     public void onClick(View v) { 
      indexxx = viewFlow.getSelectedItemPosition()+1; 
      if (indexxx<images.size()) { // Should be <, you have a wrong boundary check here!!! 
       viewFlow.setSelection(indexxx); 
       Log.i("indexxx", "indexxx : " + indexxx); 
      } 
     } 
+0

はViewFlow.classのソースコードです:http://pastebin.com/e5EPpH4J –

+0

実際にはうまくいくはずですが、1回のスワイプで3ビットマップを追加するにはどうすればよいですか?私はすべてのビットマップをロードしようとすると、私はメモリ例外から出ている。ありがとう! –

+0

元の画像の代わりにサムネイルを使うべきだと思います。 – Caner

関連する問題