2013-08-12 5 views
5

一つはDayGallery活性(無限の画像ギャラリー)と呼ばれて決定された画像の位置でスクロール私はギャラリーを開いたときに、無限のギャラリー私のアプリの活動の

することは、それはランダムに最初の画像を表示し、最初の画像Iと起動しないDayGalleryアクティビティコードで指定されています。

何を達成しようとしていますと、次のとおりです。

FIRST:

オープン1日目のギャラリーは、表示される最初のイメージは次のとおりです:

R.drawable.day_one_1 
以下のようにDayGalleryアクティビティコードで指定された最初の画像で始まる

と開いているDay2ギャラリーの場合、最初に表示される画像は次のとおりです。

R.drawable.day_two_1 

と同様に、すべてのDaysギャラリーでは、でもは両サイドで無制限にスクロールします。

SECOND:午前ギャラリーにそして、私はギャラリーを出る前に、私が見た同じ画像を見たいと思って、前のアクティビティに移動し、ギャラリーに再び戻るために戻って押し 例えばday_one_7という名前の画像の上に停止した場合私がアプリケーションを終了してギャラリーをもう一度開くと、DayGalleryアクティビティコードで指定された最初の画像を表示するようにリセットする必要があります(下の画像を参照)。

enter image description here

実際に任意のヘルプは高く評価されます

、私はその目的のためにグーグルを検索しかし、私はそれについての役に立つ事を得るカント。

DayGallery.java:

@SuppressWarnings("deprecation") 
public class DayGallery extends Activity { 
TextView tv; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
      WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
    Boolean customTitleSupported = requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); 
    // Set the layout to use 
    setContentView(R.layout.main); 
    if (customTitleSupported) { 
     getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,R.layout.custom_title); 
     tv = (TextView) findViewById(R.id.title_tv1); 
     tv.setTypeface(FontFactory.getBFantezy(getBaseContext())); 
     }   
    InfiniteGallery galleryOne = (InfiniteGallery) findViewById(R.id.galleryOne); 
    galleryOne.setAdapter(initializeImages()); 
    galleryOne.setSelection(galleryOne.getCount()/2); 
    } 

private InfiniteGalleryAdapter initializeImages() { 
    InfiniteGalleryAdapter galleryAdapter = null; 

    String day = getIntent().getStringExtra("dayname"); 

    if(day.equalsIgnoreCase("Day1")){ 
     int[] tempimages = { R.drawable.day_one_1, R.drawable.day_one_2,R.drawable.day_one_3, 
       R.drawable.day_one_4, R.drawable.day_one_5,R.drawable.day_one_6,R.drawable.day_one_7,  
       R.drawable.day_one_8, R.drawable.day_one_9,R.drawable.day_one_10,R.drawable.day_one_11, 
       R.drawable.day_one_12 
     }; 
     String[] name = { "00:35","00:35","00:35","1:07","2:00","2:01","2:09", 
          "2:12","2:15","6:13","6:13","6:13" 
     }; 
     tv.setText("Day one pictures"); 
     galleryAdapter=new InfiniteGalleryAdapter(this, tempimages, name); 
     }  
    else if(day.equalsIgnoreCase("Day2")){ 
     int[] tempimages = { R.drawable.day_two_1, R.drawable.day_two_2,R.drawable.day_two_3, 
       R.drawable.day_two_4, R.drawable.day_two_5,R.drawable.day_two_6,R.drawable.day_two_7, 
       R.drawable.day_two_8, R.drawable.day_two_9,R.drawable.day_two_10,R.drawable.day_two_11, 
       R.drawable.day_two_12 
     }; 
     String[] name = { "12:04","12:04", "12:04","12:05","12:06", "12:07", 
          "12:07","12:07","12:08","12:10","12:10","12:10" 
     }; 
     tv.setText("Day two pictures"); 
     galleryAdapter=new InfiniteGalleryAdapter(this, tempimages, name); 
     } 

    // AND THE SAME FOR REST OF DAYS TILL Day10// 

    return galleryAdapter; 
    } 
} 

class InfiniteGalleryAdapter extends BaseAdapter { 
private Context mContext; 
private int[] images; 
private String[] name; 
public InfiniteGalleryAdapter(Context c, int[] imageIds,String[] names) { 
    this.mContext = c; 
    images = imageIds; 
    name=names; 
    inflater = (LayoutInflater)mContext.getSystemService (Context.LAYOUT_INFLATER_SERVICE); 
    } 
public int getCount() { 
    return Integer.MAX_VALUE; 
    } 
public Object getItem(int position) { 
    return position; 
    } 
public long getItemId(int position) { 
    return position; 
    } 
private LayoutInflater inflater=null; 

public class ViewHolder{ 
    public TextView text; 
    public ImageView image; 
    } 

public View getView(int position, View convertView, ViewGroup parent) { 
    ImageView i = getImageView(); 

    int itemPos = (position % images.length); 

    try { i.setImageResource(images[itemPos]); ((BitmapDrawable) i.getDrawable()).setAntiAlias(true); 
    } 
    catch (OutOfMemoryError e) { Log.e("InfiniteGalleryAdapter", "Out of memory creating imageview. Using empty view.", e); 
    } 
    View vi=convertView; 
    ViewHolder holder; 
    if(convertView==null){ 
     vi = inflater.inflate(R.layout.gallery_items, null); 
     holder=new ViewHolder(); 
     holder.text=(TextView)vi.findViewById(R.id.textView1); 
     holder.image=(ImageView)vi.findViewById(R.id.image); 
     vi.setTag(holder); 
     } 
    else holder=(ViewHolder)vi.getTag(); 
    holder.text.setText(name[itemPos]); 

    final int stub_id=images[itemPos]; 
    holder.image.setImageResource(stub_id); 

    return vi; 
    } 

private ImageView getImageView() { 

    ImageView i = new ImageView(mContext); 

    return i; 
    } 
} 

    @SuppressWarnings("deprecation") 
class InfiniteGallery extends Gallery { 

public InfiniteGallery(Context context) { 
    super(context); 
    init(); 
    } 

public InfiniteGallery(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    init(); 
    } 

public InfiniteGallery(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
    init(); 
    } 

private void init(){ 
    // These are just to make it look pretty 
    setSpacing(25); 
    setHorizontalFadingEdgeEnabled(false); 
    } 
} 

UPDATE:この行の後に

galleryOne.setSelection(0); 

が、私はこのコード行を追加します

galleryOne.setSelection(galleryOne.getCount()/2); 
我々は無限の双方向を取得できますか私のコード、それはDayGallery活動でそれを指定された最初の画像を示すになりますが、それだけではなく、両方の側で左側に一方通行の無限スクロールになるで

DayGalleryアクティビティで指定された最初の画像を表示しながら、ギャラリー画像をスクロールしますか?

本当にありがとうございます、ありがとうございます。

答えて

1

フラグメントを使用する無限ビューページャを作成するロジックを教えてください。このビューページは、両方向に無限にスクロールできます。また、特定のフラグメントから起動することもできます。

私は電子ブックを持っていて、ユーザーはメニュー(チャプター)をクリックすることができ、それを起動して両方の方法でスクロールすることができるはずです。

チェックコード::私はあなたのギャラリーで同じことを達成しようとしていると思います

InfinitePagerAdapter.java:

package com.example.multiplepages; 

import android.os.Parcelable; 
import android.support.v4.view.PagerAdapter; 
import android.util.Log; 
import android.view.View; 
import android.view.ViewGroup; 

/** 
* A PagerAdapter that wraps around another PagerAdapter to handle paging 
* wrap-around. 
* 
*/ 
public class InfinitePagerAdapter extends PagerAdapter { 

    private static final String TAG = "InfinitePagerAdapter"; 
    private static final boolean DEBUG = true; 

    private PagerAdapter adapter; 

    public InfinitePagerAdapter(PagerAdapter adapter) { 
    this.adapter = adapter; 
    } 

    @Override 
    public int getCount() { 
    // warning: scrolling to very high values (1,000,000+) results in 
    // strange drawing behaviour 
    return Integer.MAX_VALUE; 

    } 

    /** 
    * @return the {@link #getCount()} result of the wrapped adapter 
    */ 
    public int getRealCount() { 
    return adapter.getCount(); 
    } 

    @Override 
    public Object instantiateItem(ViewGroup container, int position) { 
     debug("getRealCount: " + getRealCount()); 
     int virtualPosition = position % getRealCount(); 
     debug("instantiateItem: real position: " + position); 
     debug("instantiateItem: virtual position: " + virtualPosition); 

     // only expose virtual position to the inner adapter 
     return adapter.instantiateItem(container, virtualPosition); 
    } 

    @Override 
    public void destroyItem(ViewGroup container, int position, Object object) { 
    int virtualPosition = position % getRealCount(); 
    debug("destroyItem: real position: " + position); 
    debug("destroyItem: virtual position: " + virtualPosition); 

    // only expose virtual position to the inner adapter 
    adapter.destroyItem(container, virtualPosition, object); 
    } 

    /* 
    * Delegate rest of methods directly to the inner adapter. 
    */ 

    @Override 
    public void finishUpdate(ViewGroup container) { 
    adapter.finishUpdate(container); 
    } 

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

    @Override 
    public void restoreState(Parcelable bundle, ClassLoader classLoader) { 
    adapter.restoreState(bundle, classLoader); 
    } 

    @Override 
    public Parcelable saveState() { 
    return adapter.saveState(); 
    } 

    @Override 
    public void startUpdate(ViewGroup container) { 
    adapter.startUpdate(container); 
    } 

    /* 
    * End delegation 
    */ 

    private void debug(String message) { 
    if (DEBUG) { 
     Log.d(TAG, message); 
    } 
    } 
} 

InfiniteViewPager.java:

package com.example.multiplepages; 


import android.content.Context; 
import android.support.v4.view.PagerAdapter; 
import android.support.v4.view.ViewPager; 
import android.util.AttributeSet; 
import android.util.Log; 

/** 
* A {@link ViewPager} that allows pseudo-infinite paging with a wrap-around 
* effect. Should be used with an {@link InfinitePagerAdapter}. 
* 
*/ 
public class InfiniteViewPager extends ViewPager { 

    int mPageOffset = 0; 

    public InfiniteViewPager(Context context) { 
    super(context); 
    } 

    public InfiniteViewPager(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    } 

    @Override 
    public void setAdapter(PagerAdapter adapter) { 
    super.setAdapter(adapter); 
    // offset first element so that we can scroll to the left 
    setCurrentItem(0); 
    } 

    public void setpageOffset(int pageOffset) { 
     mPageOffset = pageOffset; 
    } 

    @Override 
    public void setCurrentItem(int item) { 
    // offset the current item to ensure there is space to scroll 
    item = getOffsetAmount() + (item % getAdapter().getCount()); 
    item = item + mPageOffset; 
    super.setCurrentItem(item); 

    } 

    private int getOffsetAmount() { 
    if (getAdapter() instanceof InfinitePagerAdapter) { 
     InfinitePagerAdapter infAdapter = (InfinitePagerAdapter) getAdapter(); 
     // allow for 100 back cycles from the beginning 
     // should be enough to create an illusion of infinity 
     // warning: scrolling to very high values (1,000,000+) results in 
     // strange drawing behaviour 
     return infAdapter.getRealCount() * 100; 
    } else { 
     return 0; 
    } 
    } 

} 

MultiplePageScroll.java:これはMainActivityです。

package com.example.multiplepages; 

import java.util.ArrayList; 
import java.util.List; 

import android.content.pm.ActivityInfo; 
import android.graphics.Color; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.view.Window; 
import android.widget.ProgressBar; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 
import android.support.v4.app.FragmentTransaction; 
import android.support.v4.view.PagerAdapter; 
import android.support.v4.view.ViewPager; 
import android.support.v4.view.ViewPager.OnPageChangeListener; 

public class MultiplePageScroll extends FragmentActivity { 

    private int listSize = 0; 
    public int listPos = 0; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
     this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.activity_multiple_page_scroll); 
     Bundle bundle = getIntent().getExtras(); 
     listSize = bundle.getInt("listSize"); 
     listPos = bundle.getInt("itemPosition"); 

     PagerAdapter adapter = new FragmentPagerAdapter(getSupportFragmentManager()) { 

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

      @Override 
      public Fragment getItem(int position) { 
      Fragment fragment = new PageFragment(); 
      Bundle args = new Bundle(); 
      args.putInt("identifier", position); 
      fragment.setArguments(args); 
      return fragment; 
      } 
     }; 

     // wrap pager to provide infinite paging with wrap-around 
     PagerAdapter wrappedAdapter = new InfinitePagerAdapter(adapter); 

     // actually an InfiniteViewPager 
     InfiniteViewPager viewPager = (InfiniteViewPager) findViewById(R.id.pager); 
     viewPager.setpageOffset(listPos); 
     viewPager.setAdapter(wrappedAdapter); 

    } 
} 

PageFragment.java:

package com.example.multiplepages; 

import java.io.IOException; 

import android.app.AlertDialog; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.content.res.AssetManager; 
import android.graphics.Bitmap; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.util.Log; 
import android.view.GestureDetector; 
import android.view.KeyEvent; 
import android.view.LayoutInflater; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.ViewGroup; 
import android.webkit.WebChromeClient; 
import android.webkit.WebSettings; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 
import android.widget.LinearLayout; 
import android.widget.TextView; 
//import android.webkit.WebSettings; 
import android.widget.Toast; 


public class PageFragment extends Fragment { 

    String path="s_english/contents"; 
    AssetManager assMan = null; 
    int pageIndex; 
    String pagePath = null;  
    String[] pageList = null; 
    private int listPosition; 

    public static PageFragment newInstance(int index) { 

     PageFragment pageFragment = new PageFragment(); 
     Bundle bundle = new Bundle(); 
     bundle.putInt("index", index); 
     pageFragment.setArguments(bundle); 
     return pageFragment; 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Bundle args = getArguments(); 
     listPosition = args.getInt("identifier"); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     View view = inflater.inflate(R.layout.fragment, container, false); 
     WebView mWebView = (WebView) view.findViewById(R.id.webview); 
     mWebView.addJavascriptInterface(new JavaScriptInterface(getActivity()), "NativeFunc"); 
     WebSettings webSettings = mWebView.getSettings();  
     webSettings.setJavaScriptEnabled(true); 
     mWebView.setWebViewClient(new MyWebViewClient());  
     mWebView.getSettings().setBuiltInZoomControls(true); 

     assMan = getActivity().getAssets(); 
     try { 
      pageList = assMan.list(path); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     pageIndex = listPosition; 
     pagePath=pageList[pageIndex]; 

     mWebView.loadUrl("file:///android_asset/s_english/contents/" + pagePath); 
      //mWebView.loadUrl("http://192.168.0.33:8080/orginalsource/contents/" + pagePath); 
      //MultiplePageScroll.mSpinner.setVisibility(View.GONE); 

     return view; 
    } 

    @Override 
    public void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     outState.putBoolean("dummy", true); 
    } 


    private class MyWebViewClient extends WebViewClient { 

     @Override 
     public void onPageFinished(WebView view, String url) { 
      super.onPageFinished(view, url); 
     } 

     @Override 
     public void onPageStarted(WebView view, String url, Bitmap favicon) { 
      super.onPageStarted(view, url, favicon); 
     } 

    } 

} 

activity_multiple_page_scroll.xmlは:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <com.example.multiplepages.InfiniteViewPager 
     android:id="@+id/pager" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" /> 

</LinearLayout> 

あなたはlaunchedpageを保存し、それを使用するためにsharedPrefernceを使用することができます。このコードを少し修正することで、あなたが望むものを達成することができます。

+0

この単語の下に赤い線のエラーがあります。この行のPageFragment:Fragment fragment = new PageFragment(); 、アドバイス、そして、どういうふうにactivity_multiple_page_scroll.xmlレイアウトがどうなるかを教えてください。 –

+0

私はPageFragment.javaとactivity_multiple_page_scroll.xmlを追加するコードを編集しました。 – Sushil

+0

私のfirendはこの初めての断片ですので、私は別の赤い線単語の下のエラー:この行のJavaScriptInterface:mWebView.addJavascriptInterface(新しいJavaScriptInterface(getActivity())、 "NativeFunc"); また、R.id.webviewを含むfragment.xmlレイアウトとレイアウトが必要です。なぜなら、R.layout.fragmentとR.id.webviewの下に赤い線エラーがあります。xmlレイアウトが見つからないためです。ありがとうございました。 –

関連する問題