[Android]GridView 를 통 해 로 컬 이미지 예제 코드 를 동적 으로 추가 합 니 다.
실현 효과
주로 클릭+로 컬 앨범 에 그림 을 추가 하고 그림 을 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
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Spring Data JPA의 동적 조회 인스턴스예를 들어 프론트에 여러 가지 조건이 있는데 이런 조건은 대부분이 선택할 수 있다. hibernate를 사용할 때 조건을 판단하여 SQL(HQL)을 연결할 수 있다. 만약 컴파일러가 조회에 대해 문법 정확성을 검사할...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.