2013-04-09 4 views
2

나는 안드로이드 프로그래밍에 익숙하지 않은 다음 그리드 뷰가있는 뷰어 페이저를 가지고있는 갤러리를 구현하려고하지만, 이것을 작동시키는 데 몇 가지 문제가있다. 나는 현재 정적 이미지 어댑터를 사용하고 있지만 뷰 페이저를 대신 사용하는 방법을 잘 모르겠다. 나는 또한 각 화면에 내 자신의 타이틀을 추가 할 수 있기를 원하지만이 작업을 수행하는 방법이나 이미지 이름이 표시되어야하는지 여부는 확실하지 않았습니다.안드로이드 프로그래밍 GridView의 ViewPager

나는이 순간에이 코드 ...

그리드 뷰

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#3d3d3e" > 

    <GridView 
     android:id="@+id/gridview1" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_above="@+id/phone" 
     android:columnWidth="90dp" 
     android:gravity="center" 
     android:horizontalSpacing="10dp" 
     android:numColumns="3" 
     android:stretchMode="columnWidth" 
     android:verticalSpacing="10dp" > 
</GridView> 
</RelativeLayout> 

그리드 뷰 된 .java

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.GridView; 


public class Marble extends Activity{ 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.marble); 

GridView gridView = (GridView) findViewById(R.id.gridview1); 

     // Instance of ImageAdapter Class 
     gridView.setAdapter(new ImageAdapter1(this)); 

     /** 
     * On Click event for Single Gridview Item 
     * */ 
     gridView.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View v, 
        int position, long id) { 

       // Sending image id to FullScreenActivity 
       Intent i = new Intent(getApplicationContext(), FullImageActivity1.class); 
       // passing array index 
       i.putExtra("id", position); 
       startActivity(i); 
      } 
     }); 

    } 
} 

이미지 어댑터 된 .java와 .XML

import android.content.Context; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.GridView; 
import android.widget.ImageView; 

public class ImageAdapter1 extends BaseAdapter { 
    private Context mContext; 

    // Keep all Images in array 
    Integer[] mThumbIds = { 
      R.drawable.arabescato, R.drawable.biancocarrara, 
      R.drawable.botticinoclassico, R.drawable.calacattaoro, 
      R.drawable.cremamarfil, R.drawable.cremavalencia, 
      R.drawable.emperadordark, R.drawable.jurabeige, 
      R.drawable.neromarquina, R.drawable.perlatoolympo, 
      R.drawable.rojoalicante 

    }; 

    // Constructor 
    public ImageAdapter1(Context c){ 
     mContext = c; 
    } 

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

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

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

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) {   
     ImageView imageView = new ImageView(mContext); 
     imageView.setImageResource(mThumbIds[position]); 
     imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
     imageView.setLayoutParams(new GridView.LayoutParams(265, 265)); 
     return imageView; 
    } 

} 

그리고 마지막으로 이미지 활동 ​​.java

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.widget.ImageView; 

public class FullImageActivity1 extends Activity { 



    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.full_image); 

     // get intent data 
     Intent i = getIntent(); 

     // Selected image id 
     int position = i.getExtras().getInt("id"); 
     ImageAdapter1 imageAdapter1 = new ImageAdapter1(this); 

     ImageView imageView = (ImageView) findViewById(R.id.fullimage); 
     imageView.setImageResource(imageAdapter1.mThumbIds[position]); 
     imageView.setScaleType(ImageView.ScaleType.FIT_XY); 
    } 
} 

나는 모든 것을 완벽하게 이해하지 못할 것이다.

미리 감사드립니다.

+0

이미지를 스 와이프하고 싶습니까? – Shadow

+0

예 아이폰의 사진 갤러리와 비슷해서 제목이있는 전체 화면 이미지로 격자를 만들고 이미지 사이를 왼쪽/오른쪽으로 스 와이프합니다. – David

답변

8

진행하기 전에 android.support.v4 jar 파일을 프로젝트에 추가하십시오. 레이아웃에서 ViewPagerPagerAdapter

먼저이에 full_image.xml 레이아웃을 변경 확장 어댑터 :이 요구

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

    <android.support.v4.view.ViewPager 
     android:id="@+id/view_pager" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"/> 

</LinearLayout> 

그런 다음 PagerAdapter를 확장 어댑터를 만들 (

당신은 두 가지가 필요합니다 ViewPager)

public class ImagePagerAdapter extends PagerAdapter { 

    private List<ImageView> images; 

    public ImagePagerAdapter(List<ImageView> images) { 
     this.images = images; 
    } 

    @Override 
    public Object instantiateItem(ViewGroup container, int position) { 
     ImageView imageView = images.get(position); 
     container.addView(imageView); 
     return imageView; 
    } 

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

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

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

귀하의 FullImageActivity1 개 클래스 :

public class FullImageActivity1 extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.full_image); 

     // Loop through the ids to create a list of full screen image views 
     ImageAdapter1 imageAdapter1 = new ImageAdapter1(this); 
     List<ImageView> images = new ArrayList<ImageView>(); 

     for (int i = 0; i < imageAdapter1.getCount(); i++) { 
      ImageView imageView = new ImageView(this); 
      imageView.setImageResource(imageAdapter1.mThumbIds[i]); 
      imageView.setScaleType(ImageView.ScaleType.FIT_XY); 
      images.add(imageView); 
     } 

     // Finally create the adapter 
     ImagePagerAdapter imagePagerAdapter = new ImagePagerAdapter(images); 
     ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager); 
     viewPager.setAdapter(imagePagerAdapter); 

     // Set the ViewPager to point to the selected image from the previous activity 
     // Selected image id 
     int position = getIntent().getExtras().getInt("id"); 
     viewPager.setCurrentItem(position); 
    } 
} 

일반적인 아이디어는 ViewPager에 데이터를 제공하는 PagerAdapter을 확장 어댑터를 만드는 것입니다. 자세한 내용을 보려면 Android Docs on PagerAdapter

+0

안녕하세요, 지미, 고맙습니다. 그러나 두 가지 오류로 도와주세요. 코드를 얻는 것. 먼저 container.destroyView가있는 ImagePageAdapter에 있습니다. 컨테이너에 캐스트를 추가하려고하는데 오류가 있습니다. 그리고 두 번째는 FullImageActivity1에 있는데 여기에는 = new ArrayList ; 그것은 토큰 (들), 잘못 배치 된 구문 (들)에 구문 오류가 발생 했습니까 ?? 감사합니다 – David

+0

죄송합니다. 오타, 편집 된 답변을보십시오. –

+0

당신은 절대적인 스타입니다! 완벽하게 작동합니다! 지금해야 할 일은 검색 가능한 목록보기에서 돌 제목을 찾고 결과에서보기 호출기로 푸시하도록 내 검색을 수행하는 것입니다. 또한 iOS 기술은 어떤가요? – David