[Android]GridView 를 통 해 로 컬 이미지 예제 코드 를 동적 으로 추가 합 니 다.

앞의 글 은"즉석에서 찍 기"에서 이미지 처리 작업 을 다 루 고 있 습 니 다.이 글 은 GridView 컨트롤 이 로 컬 그림 을 추가 하고 표시 하 는 것 을 다 루 고 있 습 니 다.주로 GridView 컨트롤 에 대한 기본 동작 입 니 다.BaseAdapter 의 어댑터 를 사용자 정의 로 계승 하여 그림 을 불 러 올 수 있 습 니 다.아래 는 사용자 정의 어댑터 가 아 닙 니 다.Simple Adapter 를 호출 하여 이 루어 진 것 입 니 다.게시 물 과 인터넷 의 상호작용 에 대해 서 는 설명 하지 않 습 니 다.다음 글 은 설명 할 것 입 니 다!
실현 효과
주로 클릭+로 컬 앨범 에 그림 을 추가 하고 그림 을 GridView 로 표시 합 니 다.그림 을 클릭 하면 삭제 작업 을 할 수 있 습 니 다.또한 화면 에 있 는 EditView 컨트롤 도 보기 좋 습 니 다.부족 한 점 은+좋 습 니 다.마지막 으로 이동 하지 않 았 지만 원리 가 같 습 니 다.
      
프로젝트 구조

3.인터페이스 레이아웃 상세 코드
1.메 인 인터페이스 activitymain.xml
주로 상대 적 인 레이아웃 을 통 해 이 루어 집 니 다.첫 번 째 부분 은 밑 에 있 는 TextView 이 고 중간 은 EditView 와 GridView 의 상대 적 인 레이아웃 입 니 다.아래 는 두 개의 단추 입 니 다.또한 EditView 는 res/drawable-hdpi 의 editview 를 호출 합 니 다.shape.xml,GridView 에 표 시 된 모든 그림 은 griditemaddpic.xml 구현.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  xmlns:tools="http://schemas.android.com/tools" 
  android:id="@+id/container" 
  android:layout_width="match_parent" 
  android:layout_height="match_parent" 
  tools:context="com.example.suishoupaipublish.MainActivity" 
  tools:ignore="MergeRootFrame" > 
   
  <!--        -->  
  <RelativeLayout  
    android:id="@+id/Layout_top"  
    android:orientation="horizontal"   
    android:layout_width="fill_parent"  
    android:layout_height="40dp"  
    android:layout_marginTop="5dp" 
    android:layout_alignParentTop="true"  
    android:gravity="center">  
    <TextView  
      android:layout_width="fill_parent"   
      android:layout_height="wrap_content"   
      android:textSize="25sp" 
      android:gravity="center" 
      android:text="    " />  
  </RelativeLayout>  
  <!--      -->  
  <RelativeLayout  
    android:id="@+id/Layout_bottom"   
    android:layout_alignParentBottom="true" 
    android:layout_width="fill_parent"   
    android:layout_height="50dp" 
    android:gravity="center" >  
    <Button  
      android:id="@+id/button1"  
      android:layout_width="wrap_content"  
      android:layout_height="fill_parent" 
      android:textSize="20sp" 
      android:text="    " />  
    <Button  
      android:id="@+id/button2"  
      android:layout_width="wrap_content"  
      android:layout_height="fill_parent" 
      android:layout_toRightOf="@+id/button1" 
      android:textSize="20sp" 
      android:text="    " /> 
  </RelativeLayout>  
  <!--      -->  
  <RelativeLayout  
    android:id="@+id/Content_Layout"    
    android:layout_width="fill_parent"   
    android:layout_height="fill_parent"  
    android:layout_above="@id/Layout_bottom"   
    android:layout_below="@id/Layout_top"   
    android:gravity="center">    
    <LinearLayout   
      android:layout_width="match_parent"  
      android:layout_height="match_parent"  
      android:orientation="vertical" 
      android:layout_alignParentBottom="true" >  
      <!--                   --> 
      <EditText  
        android:id="@+id/editText1" 
        android:layout_height="120dp" 
        android:layout_width="fill_parent" 
        android:textColor="#000000" 
        android:layout_margin="12dp" 
        android:textSize="20sp" 
        android:hint="          ..." 
        android:maxLength="500" 
        android:singleLine="false" 
        android:background="@drawable/editview_shape" /> 
      <!--            5dp     90dp --> 
      <GridView 
        android:id="@+id/gridView1" 
        android:layout_width="fill_parent" 
        android:layout_height="200dp" 
        android:layout_margin="10dp" 
        android:background="#EFDFDF" 
        android:horizontalSpacing="5dp" 
        android:verticalSpacing="5dp" 
        android:numColumns="4" 
        android:columnWidth="90dp" 
        android:stretchMode="columnWidth" 
        android:gravity="center" > 
      </GridView> 
      <TextView  
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:text="(    :    9   ,             )" 
        android:gravity="center" /> 
    </LinearLayout> 
  </RelativeLayout> 
   
</RelativeLayout> 
2.ImageView 그림 레이아웃 보이 기 griditemaddpic.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:gravity="center" 
  android:descendantFocusability="blocksDescendants" 
  android:orientation="vertical" > 
  <RelativeLayout 
    android:layout_gravity="center" 
    android:layout_width="80dp" 
    android:layout_height="80dp" 
    android:orientation="vertical" > 
    <ImageView 
      android:layout_marginTop="10dp" 
      android:layout_marginRight="10dp" 
      android:id="@+id/imageView1" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:scaleType="fitXY" 
      android:src="@drawable/gridview_addpic" /> 
  </RelativeLayout> 
</LinearLayout> 
3.EditView 컨트롤 의 원 각 과 색상 editview 설정shape.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"  
  android:shape="rectangle"  
  android:padding="10dp"> 
  <!--   editView    --> 
  <soild android:color="#ffffff"/> 
  <!--        ,radius    ,editView      --> 
  <corners  
    android:radius="15dp" 
    android:bottomRightRadius="15dp" 
    android:bottomLeftRadius="15dp" 
    android:topLeftRadius="15dp"  
    android:topRightRadius="15dp"/> 
  <stroke 
    android:color="#32CD32"  
    android:width="4px" />  
</shape> 
코드 상세 설명
그것 은 주로 사상 이 다음 과 같다.
1.SimpleAdapter 어댑터 를 통 해 그림 을 불 러 오고 gridView 1.setOnItemClickListener()클릭 함수 에서 서로 다른 동작 에 응답 합 니 다.
2.추가 그림(+)을 누 르 면 로 컬 앨범 을 Intent 를 통 해 그림 경 로 를 문자열 pathImage 에 저장 합 니 다.
3.그림 경 로 를 가 져 온 후 onResume 에서 그림 을 새로 고 칩 니 다.GridView 의 setAdapter()와 notifyDataSetChanged()()함 수 를 통 해 그림 을 새로 고 칩 니 다.
4.그림 을 클릭 하면 그 position 을 가 져 옵 니 다.dialog()함수 팝 업 대화 상 자 를 통 해 삭제 여 부 를 알 리 고 remove 를 통 해 삭제 합 니 다.
구체 적 인 코드 는 다음 과 같다.

public class MainActivity extends Activity { 
 
  private GridView gridView1;       //        
  private Button buttonPublish;      //     
  private final int IMAGE_OPEN = 1;    //       
  private String pathImage;        //       
  private Bitmap bmp;           //       
  private ArrayList<HashMap<String, Object>> imageItem; 
  private SimpleAdapter simpleAdapter;   //    
   
  @Override 
  protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    /* 
     *           
     *        activity   android:windowSoftInputMode="adjustPan" 
     *          android:windowSoftInputMode="adjustResize" 
     */ 
    getWindow().setSoftInputMode(WindowManager.LayoutParams. 
        SOFT_INPUT_ADJUST_PAN); 
    //     
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
    setContentView(R.layout.activity_main); 
    //       
    gridView1 = (GridView) findViewById(R.id.gridView1); 
 
    /* 
     *              
     *         
     * SimpleAdapter  imageItem     R.layout.griditem_addpic    
     */ 
    //         
    bmp = BitmapFactory.decodeResource(getResources(), R.drawable.gridview_addpic); 
    imageItem = new ArrayList<HashMap<String, Object>>(); 
    HashMap<String, Object> map = new HashMap<String, Object>(); 
    map.put("itemImage", bmp); 
    imageItem.add(map); 
    simpleAdapter = new SimpleAdapter(this,  
        imageItem, R.layout.griditem_addpic,  
        new String[] { "itemImage"}, new int[] { R.id.imageView1});  
    /* 
     * HashMap  bmp   GridView    ,        ID      
     * map.put("itemImage", R.drawable.img); 
     *     : 
     *       1.     BaseAdapter   
     *       2.ViewBinder()     
     */ 
    simpleAdapter.setViewBinder(new ViewBinder() {  
      @Override  
      public boolean setViewValue(View view, Object data,  
          String textRepresentation) {  
        // TODO Auto-generated method stub  
        if(view instanceof ImageView && data instanceof Bitmap){  
          ImageView i = (ImageView)view;  
          i.setImageBitmap((Bitmap) data);  
          return true;  
        }  
        return false;  
      } 
    });  
    gridView1.setAdapter(simpleAdapter); 
     
    /* 
     *   GridView     
     *   :                 import android.view.View; 
     */ 
    gridView1.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View v, int position, long id) 
      { 
        if( imageItem.size() == 10) { //         
          Toast.makeText(MainActivity.this, "   9   ", Toast.LENGTH_SHORT).show(); 
        } 
        else if(position == 0) { //       + 0  0    
          Toast.makeText(MainActivity.this, "    ", Toast.LENGTH_SHORT).show(); 
          //     
          Intent intent = new Intent(Intent.ACTION_PICK,     
              android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);  
          startActivityForResult(intent, IMAGE_OPEN);  
          //  onResume()     
        } 
        else { 
          dialog(position); 
          //Toast.makeText(MainActivity.this, "   "+(position + 1)+"    ",  
          //   Toast.LENGTH_SHORT).show(); 
        } 
      } 
    });  
  } 
   
  //         startActivityForResult  
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
    super.onActivityResult(requestCode, resultCode, data);     
    //      
    if(resultCode==RESULT_OK && requestCode==IMAGE_OPEN) {     
      Uri uri = data.getData();  
      if (!TextUtils.isEmpty(uri.getAuthority())) {  
        //        
        Cursor cursor = getContentResolver().query(  
            uri,  
            new String[] { MediaStore.Images.Media.DATA },  
            null,   
            null,   
            null);  
        //            
        if (null == cursor) {  
          return;  
        }  
        //                
        cursor.moveToFirst();  
        pathImage = cursor.getString(cursor  
            .getColumnIndex(MediaStore.Images.Media.DATA));  
      } 
    } //end if      
  } 
   
  //     
  @Override 
  protected void onResume() { 
    super.onResume(); 
    if(!TextUtils.isEmpty(pathImage)){ 
      Bitmap addbmp=BitmapFactory.decodeFile(pathImage); 
      HashMap<String, Object> map = new HashMap<String, Object>(); 
      map.put("itemImage", addbmp); 
      imageItem.add(map); 
      simpleAdapter = new SimpleAdapter(this,  
          imageItem, R.layout.griditem_addpic,  
          new String[] { "itemImage"}, new int[] { R.id.imageView1});  
      simpleAdapter.setViewBinder(new ViewBinder() {  
        @Override  
        public boolean setViewValue(View view, Object data,  
            String textRepresentation) {  
          // TODO Auto-generated method stub  
          if(view instanceof ImageView && data instanceof Bitmap){  
            ImageView i = (ImageView)view;  
            i.setImageBitmap((Bitmap) data);  
            return true;  
          }  
          return false;  
        } 
      });  
      gridView1.setAdapter(simpleAdapter); 
      simpleAdapter.notifyDataSetChanged(); 
      //                 
      pathImage = null; 
    } 
  } 
   
  /* 
   * Dialog            
   * position        
   */ 
  protected void dialog(final int position) { 
    AlertDialog.Builder builder = new Builder(MainActivity.this); 
    builder.setMessage("          ?"); 
    builder.setTitle("  "); 
    builder.setPositiveButton("  ", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
        dialog.dismiss(); 
        imageItem.remove(position); 
        simpleAdapter.notifyDataSetChanged(); 
      } 
    }); 
    builder.setNegativeButton("  ", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
        dialog.dismiss(); 
        } 
      }); 
    builder.create().show(); 
  } 
 
} 
또한 AndroidMainfest.xml 에 SD 카드 와 네트워크 를 서버 에 업로드 할 수 있 는 권한 을 추가 해 야 합 니 다.

<!--        --> 
<uses-permission android:name="android.permission.INTERNET" /> 
<!--        SD  -->  
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
총화
이 글 은 한 가지 주의해 야 할 점 이 있 습 니 다.Simple Adapter 어댑터 로 bmp 그림 을 불 러 올 때 GridView 에 표시 되 지 않 을 수 있 습 니 다.즉,HashMap 에 map.put("itemImage",bmp)는 그림 을 표시 하지 않 고 put 로 R.drawable.img 을 불 러 오 면 표 시 됩 니 다.
이 때 두 가지 해결 방법 이 있 는데 하 나 는 BaseAdapter 를 사용자 정의 로 계승 하 는 어댑터 입 니 다.또 다른 방법 은 위 에서 보 듯 이 ViewBinder()인 터 페 이 스 를 통 해 이 루어 집 니 다.블 로 거 dmin 에 감 사 드 립 니 다.제공 하 는 방법.
demo 다운로드 주소:http://xiazai.jb51.net/201701/yuanma/GirdViewTest_jb51.rar
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기