2016-08-06 3 views
0

안녕하세요 이미지 격자보기 용 코드가 있습니다. 그리드의 각 이미지를 클릭하면 빈 레이아웃이 열립니다. 첫 번째 이미지를 클릭하면 더 큰 크기로 열리겠습니다.안드로이드에있는 이미지의 클릭 격자 모양

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

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

/** 
* Created by lenovo on 06/08/2016. 
*/ 
public class MyAdapter extends BaseAdapter { 
    private final List<Item> mItems = new ArrayList<Item>(); 
    private final LayoutInflater mInflater; 

    public MyAdapter(Context context) { 
     mInflater = LayoutInflater.from(context); 

     mItems.add(new Item("Red",  R.drawable.ic_menu_camera)); 
     mItems.add(new Item("Magenta", R.drawable.ic_menu_gallery)); 
     mItems.add(new Item("Dark Gray", R.drawable.ic_menu_manage)); 
     mItems.add(new Item("Gray",  R.drawable.ic_menu_send)); 
     mItems.add(new Item("Green",  R.drawable.ic_menu_share)); 
     mItems.add(new Item("Cyan",  R.drawable.ic_menu_slideshow)); 
     mItems.add(new Item("Red",  R.drawable.ic_menu_camera)); 
     mItems.add(new Item("Magenta", R.drawable.ic_menu_gallery)); 
     mItems.add(new Item("Dark Gray", R.drawable.ic_menu_manage)); 
     mItems.add(new Item("Gray",  R.drawable.ic_menu_send)); 
     mItems.add(new Item("Green",  R.drawable.ic_menu_share)); 
     mItems.add(new Item("Cyan",  R.drawable.ic_menu_slideshow)); 

    } 

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

    @Override 
    public Item getItem(int i) { 
     return mItems.get(i); 
    } 

    @Override 
    public long getItemId(int i) { 
     return mItems.get(i).drawableId; 
    } 

    @Override 
    public View getView(int i, View view, ViewGroup viewGroup) { 
     View v = view; 
     ImageView picture; 
     TextView name; 

     if (v == null) { 
      v = mInflater.inflate(R.layout.grid_item, viewGroup, false); 
      v.setTag(R.id.picture, v.findViewById(R.id.picture)); 
      v.setTag(R.id.text, v.findViewById(R.id.text)); 
     } 

     picture = (ImageView) v.getTag(R.id.picture); 
     name = (TextView) v.getTag(R.id.text); 

     Item item = getItem(i); 

     picture.setImageResource(item.drawableId); 
     name.setText(item.name); 

     return v; 
    } 

    private static class Item { 
     public final String name; 
     public final int drawableId; 

     Item(String name, int drawableId) { 
      this.name = name; 
      this.drawableId = drawableId; 
     } 
    } 
} 

이이 SquareImageView 자바 클래스입니다 : - - :

내가이 주요

import android.content.Intent; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.GridView; 

public class fitgridview extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_fitgridview); 
     GridView gridView = (GridView)findViewById(R.id.gridview); 
     gridView.setAdapter(new MyAdapter(this)); 
     gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 
       // Send intent to SingleViewActivity 
       Intent i = new Intent(getApplicationContext(), SingleViewActivity2.class); 

       // Pass image index 
       i.putExtra("id", position); 
       startActivity(i); 
      } 
     }); 
    } 
} 

의 코드이며,이 myAdapter 자바 클래스의 코드 를 클릭 같은 이미지를 호출

import android.content.Context; 
import android.util.AttributeSet; 
import android.widget.ImageView; 

/** 
* Created by lenovo on 06/08/2016. 
*/ 
public class SquareImageView extends ImageView { 
    public SquareImageView(Context context) { 
     super(context); 
    } 

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

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

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
     setMeasuredDimension(getMeasuredWidth(), getMeasuredWidth()); //Snap to width 
    } 
} 

클릭하면 어떻게 될까요? 내가 무엇을해야하는지 SingleViewActivity2로 작성해야합니까 도와 주셔서 감사합니다.

+0

가 두 번째 활동 코드를 보여줄 수 활동 사이 Parcelable 개체를 전달할 수 있습니다? –

답변

0

액티비티에서 객체로 객체를 전달한 다음 렌더링합니다.

현재 어댑터에서 개체를 만들고 렌더링하는 것은 프로그래밍 연습입니다.

개체를 활동에서 전달하면 다음 활동으로 의도를 가진 개체를 전달할 수 있으며 요구 사항을 충족 할 수 있습니다.

귀하의 문제를 해결하는 유일한 방법입니다.

+0

아니, 개체가 두 번째 활동에 클릭 청취자를 통과해야합니다 –

+0

도 고마워요. – mh9

1

첫째, 어댑터는 목록 만 보유합니다. 액티비티에서 객체 을 추가하고 거기에있는 목록을 전달합니다. 코드에서

, 대신 ArrayAdapter<Item> 대신 BaseAdapter을 연장하려는 경우 지금

// Fields 
private List<Item> mItems = new ArrayList<Item>(); 
private MyAdapter mAdapter; 

// onCreate 
mAdapter = new MyAdapter(this, mItems); 
gridView.setAdapter(mAdapter); 

, 당신은 몇 가지 유용한 방법을 활용할 수있다. 예를 들어,

mAdapter.add(new Item(...)); 

이제, 당신이 응답의 범위 밖이다, public class Item implements Parcelable을 수행하는 방법을 연구 좋습니다. 당신이이 있으면

, 당신은 우리가 당신이 시도 것을 알 수 있도록

gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 
      // Send intent to SingleViewActivity 
      Intent i = new Intent(getApplicationContext(), SingleViewActivity2.class); 

      // Pass image item 
      i.putExtra("item", mAdapter.getItem(position)); 
      startActivity(i); 
     } 
    }); 
+0

감사합니다 항상 내 하루를 저장합니다 – mh9

관련 문제