【移動應用開發(fā)技術(shù)】Android中GridView仿微信添加多圖效果怎么實現(xiàn)_第1頁
【移動應用開發(fā)技術(shù)】Android中GridView仿微信添加多圖效果怎么實現(xiàn)_第2頁
【移動應用開發(fā)技術(shù)】Android中GridView仿微信添加多圖效果怎么實現(xiàn)_第3頁
【移動應用開發(fā)技術(shù)】Android中GridView仿微信添加多圖效果怎么實現(xiàn)_第4頁
【移動應用開發(fā)技術(shù)】Android中GridView仿微信添加多圖效果怎么實現(xiàn)_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

【移動應用開發(fā)技術(shù)】Android中GridView仿微信添加多圖效果怎么實現(xiàn)

這篇文章主要介紹Android中GridView仿微信添加多圖效果怎么實現(xiàn),文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!效果圖在項目中這種添加⑨圖的效果應該是非常常見的,后面有個添加的按鈕應該怎么實現(xiàn),這也許讓一部分小白抓狂了吧~來吧,淡漠帶你飛,走起~~啦啦啦起飛前先說下,本篇只是講解九宮格添加圖片的效果,至于選擇圖片的效果是別人寫的庫,我只是接過來做選擇圖片用的~1.首先這是用GridView實現(xiàn)的xml布局就一個GridView

<GridView

android:id="@+id/gridView"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:columnWidth="90dp"

android:gravity="center"

android:horizontalSpacing="4dp"

android:numColumns="3"

android:scrollbars="none"

android:stretchMode="columnWidth"

android:verticalSpacing="4dp"

/>2.接下來看看java代碼

//圖片數(shù)據(jù),ImageItem是圖片選擇的庫自帶的Bean

private

ArrayList<ImageItem>

images;

//adapter是核心,添加按鈕的處理刪除的處理都在里面,后面會說,別急

private

MultiImageAdapter

adapter;

//初次進入的時候先只傳this

adapter

=

new

MultiImageAdapter(this);

gridView.setAdapter(adapter);

@Override

protected

void

onActivityResult(int

requestCode,

int

resultCode,

Intent

data)

{

super.onActivityResult(requestCode,

resultCode,

data);

if

(data

!=

null

&&

requestCode

==

3)

{

//判斷一下是否有數(shù)據(jù),有的話就addAll(),不會覆蓋已經(jīng)有的圖

if(images

==

null){

images

=

(ArrayList<ImageItem>)

data.getSerializableExtra(ImagePicker.EXTRA_RESULT_ITEMS);

}else{

images.addAll((ArrayList<ImageItem>)

data.getSerializableExtra(ImagePicker.EXTRA_RESULT_ITEMS));

}

//拿到圖片數(shù)據(jù)后把images傳過去

adapter

=

new

MultiImageAdapter(this,images);

gridView.setAdapter(adapter);

}

else

{

Toast.makeText(this,

"沒有選擇圖片",

Toast.LENGTH_SHORT).show();

}

}Ok,Java代碼也講完了,到這里沒有什么復雜的吧,添加按鈕和刪除按鈕的處理都在Adapter里面,下面開始說核心的Adapter3.核心Adapter先看xml吧

<?xml

version="1.0"

encoding="utf-8"?>

<com.anfq.mylibrary.view.SquareLayout

xmlns:android="/apk/res/android"

android:layout_width="match_parent"

android:background="#ffffff"

android:layout_height="match_parent">

<RelativeLayout

android:layout_width="match_parent"

android:layout_height="wrap_content">

<ImageView

android:id="@+id/ivIcon"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="@color/colorPrimaryDark"

android:scaleType="fitXY"

/>

<ImageButton

android:id="@+id/ibDelete"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignParentEnd="true"

android:layout_alignParentRight="true"

android:layout_alignParentTop="true"

android:background="@null"

android:padding="10dp"

android:src="@drawable/del"

/>

</RelativeLayout>

<ImageButton

android:id="@+id/ibAdd"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:layout_centerInParent="true"

android:background="#eeeeee"

android:src="@drawable/add"

android:visibility="gone"

/>

</com.anfq.mylibrary.view.SquareLayout>xml也不復雜,最外層的SquareLayout是一個讓GridView顯示的Item為正方形的處理,RelativeLayout里有個ImageView這個是用來展示圖片的,ImageButton是刪除的按鈕;然后外面ImageButton是添加按鈕,設置了隱藏屬性android:visibility="gone",只有在需要的時候才把添加按鈕召喚出來,添加完9個圖片的時候是沒有添加按鈕的。把SquareLayout的代碼也插上吧~

public

class

SquareLayout

extends

RelativeLayout

{

public

SquareLayout(Context

context,

AttributeSet

attrs,

int

defStyle)

{

super(context,

attrs,

defStyle);

}

public

SquareLayout(Context

context,

AttributeSet

attrs)

{

super(context,

attrs);

}

public

SquareLayout(Context

context)

{

super(context);

}

@SuppressWarnings("unused")

@Override

protected

void

onMeasure(int

widthMeasureSpec,

int

heightMeasureSpec)

{

setMeasuredDimension(getDefaultSize(0,

widthMeasureSpec),

getDefaultSize(0,

heightMeasureSpec));

int

childWidthSize

=

getMeasuredWidth();

int

childHeightSize

=

getMeasuredHeight();

//

高度和寬度一樣

heightMeasureSpec

=

widthMeasureSpec

=

MeasureSpec.makeMeasureSpec(

childWidthSize,

MeasureSpec.EXACTLY);

super.onMeasure(widthMeasureSpec,

heightMeasureSpec);

}

}Adapter來了

public

class

MultiImageAdapter

extends

BaseAdapter

{

private

Activity

activity;

private

LayoutInflater

inflater;

private

ArrayList<ImageItem>

mImages;

//用來判斷是否是剛剛進入,剛進入只顯示添加按鈕,也就是上面java代碼中只傳this的時候

private

boolean

is

=

false;

ImagePicker

imagePicker

=

ImagePicker.getInstance();

public

MultiImageAdapter(Activity

activity,

ArrayList<ImageItem>

images)

{

this.activity

=

activity;

this.inflater

=

LayoutInflater.from(activity);

this.mImages

=

images;

initImagePicker();//設置圖片選擇的一些屬性

}

public

MultiImageAdapter(Activity

activity)

{

this.activity

=

activity;

this.inflater

=

LayoutInflater.from(activity);

is

=

true;//設置為true表示第一次初始化

initImagePicker();//設置圖片選擇的一些屬性

}

@Override

public

int

getCount()

{

if(!is){

//這里判斷數(shù)據(jù)如果有9張就size等于9,否則就+1,+1是為按鈕留的位置

return

mImages.size()==9?mImages.size():mImages.size()+1;

}

//沒有數(shù)據(jù)就是1,1是為按鈕留的位置

return

1;

}

@Override

public

Object

getItem(int

position)

{

return

mImages.get(position);

}

@Override

public

long

getItemId(int

position)

{

return

position;

}

@Override

public

View

getView(final

int

position,

View

view,

final

ViewGroup

parent)

{

ViewHolder

holder

=

null;

if

(null

==

view)

{

view

=

inflater.inflate(R.layout.item_ulti_image,

null);

holder

=

new

ViewHolder();

holder.ivIcon

=

(ImageView)

view.findViewById(R.id.ivIcon);

holder.ibAdd

=

(ImageButton)

view.findViewById(R.id.ibAdd);

holder.ibDelete

=

(ImageButton)

view.findViewById(R.id.ibDelete);

view.setTag(holder);

}

else

{

holder

=

(ViewHolder)

view.getTag();

}

if(!is){

//選了圖片后會進入這里,先判斷下position

是否等于size

if(position

==

mImages.size()){

//執(zhí)行到這里就說明是最后一個位置,判斷是否有9張圖

if(mImages.size()

!=

9){

//沒有9張圖就顯示添加按鈕

holder.ibAdd.setVisibility(View.VISIBLE);

}else{

//有就隱藏

holder.ibAdd.setVisibility(View.GONE);

}

}else{

//還不是最后一個位置的時候執(zhí)行這里

//隱藏添加按鈕,要設置圖片嘛~

holder.ibAdd.setVisibility(View.GONE);

//根據(jù)條目位置設置圖片

ImageItem

item

=

mImages.get(position);

Glide.with(activity)

.load(item.path)

.into(holder.ivIcon);

}

//刪除按鈕的點擊事件

holder.ibDelete.setOnClickListener(new

View.OnClickListener()

{

@Override

public

void

onClick(View

v)

{

//移除圖片

mImages.remove(position);

//更新

notifyDataSetChanged();

}

});

}else{

//初次初始化的時候顯示添加按鈕

holder.ibAdd.setVisibility(View.VISIBLE);

}

//添加按鈕點擊事件

holder.ibAdd.setOnClickListener(new

View.OnClickListener()

{

@Override

public

void

onClick(View

v)

{

//判斷是否是初始化進入

if(!is){

//到這里表示已經(jīng)選過了,然后用9-size算出還剩幾個圖的位置

imagePicker.setSelectLimit(9-mImages.size());//選中數(shù)量限制

}

//跳轉(zhuǎn)到圖片選擇

Intent

intent

=

new

Intent(activity,

ImageGridActivity.class);

activity.startActivityForResult(intent,

3);

}

});

return

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論