Android開(kāi)發(fā)基于ViewPager+GridView實(shí)現(xiàn)仿大眾點(diǎn)評(píng)橫向滑動(dòng)功能
先給大家展示下效果圖,如果大家大家感覺(jué)不錯(cuò),請(qǐng)參考實(shí)現(xiàn)思路及代碼
1 ViewPager類(lèi)提供了多界面切換的新效果。
新效果有如下特征:
[1] 當(dāng)前顯示一組界面中的其中一個(gè)界面。
[2] 當(dāng)用戶(hù)通過(guò)左右滑動(dòng)界面時(shí),當(dāng)前的屏幕顯示當(dāng)前界面和下一個(gè)界面的一部分。
[3]滑動(dòng)結(jié)束后,界面自動(dòng)跳轉(zhuǎn)到當(dāng)前選擇的界面中
2 介紹里面幾個(gè)比較重要的方法與接口
1,OnPageChangeListener ViewPager頁(yè)面進(jìn)行切換監(jiān)聽(tīng)接口 其中我們經(jīng)常要實(shí)現(xiàn)public void onPageSelected(int arg0),public void onPageScrolled(int arg0, float arg1, int arg
2),public void onPageScrollStateChanged(int arg0)著三個(gè)方面,其中第一個(gè)方法是更多的用到;
2,setCurrentItem(int item),來(lái)設(shè)置跳轉(zhuǎn)到當(dāng)前的頁(yè)面;
3,要顯示ViewPager,當(dāng)然還少不了PagerAdapter類(lèi),進(jìn)行適配;其中我們經(jīng)常也要實(shí)現(xiàn)以下方法才可以:public void destroyItem(View arg0, int arg1, Object arg2),public int getCount(),public Object instantiateItem(View arg0, int arg1),public boolean isViewFromObject(View arg0, Object arg1),具體的使用方法等會(huì)看例子就ok了
3 例子代碼
java代碼
package mm.shandong.com.testviewpagergrid; import android.content.res.TypedArray; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.GridView; import android.widget.ImageView; import android.widget.RadioButton; import android.widget.RadioGroup; import android.widget.TextView; import android.widget.Toast; import java.util.ArrayList; import java.util.List; import mm.shandong.com.testviewpagergrid.entity.Catogray; public class TestViewpagerGridActivity extends AppCompatActivity { ViewPager viewPagerHomeFragment; List<Catogray> catogarys; String[] catogary_names; int[] catogary_resourceIds; LayoutInflater layoutInflater; List<View> gridViews; RadioGroup radioGroup_index_fragment; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test_viewpager_grid); catogary_names = getResources().getStringArray(R.array.catogary_names); TypedArray typedArray = getResources().obtainTypedArray(R.array.catogary_resourceIds); catogary_resourceIds = new int[typedArray.length()]; for (int i = 0; i < typedArray.length(); i++) { catogary_resourceIds[i] = typedArray.getResourceId(i, 0); } catogarys = new ArrayList<Catogray>(); viewPagerHomeFragment = (ViewPager) findViewById(R.id.viewPagerHomeFragment); layoutInflater = getLayoutInflater(); radioGroup_index_fragment = (RadioGroup) findViewById(R.id.radioGroup_index_fragment); for (int i = 0; i < catogary_names.length; i++) { Catogray catogary = new Catogray(); catogary.setName(catogary_names[i]); catogary.setImage_source(catogary_resourceIds[i]); catogarys.add(catogary); } initViewPager(); } public void initViewPager() { gridViews = new ArrayList<View>(); ///定義第一個(gè)GridView GridView gridView1 = (GridView) layoutInflater.inflate(R.layout.grid_fragment_home, null); MyGridViewAdapter myGridViewAdapter1 = new MyGridViewAdapter(0, 8); gridView1.setAdapter(myGridViewAdapter1); ///定義第二個(gè)GridView GridView gridView2 = (GridView) layoutInflater.inflate(R.layout.grid_fragment_home, null); MyGridViewAdapter myGridViewAdapter2 = new MyGridViewAdapter(1, 8); gridView2.setAdapter(myGridViewAdapter2); ///定義第三個(gè)GridView GridView gridView3 = (GridView) layoutInflater.inflate(R.layout.grid_fragment_home, null); MyGridViewAdapter myGridViewAdapter3 = new MyGridViewAdapter(2, 8); gridView3.setAdapter(myGridViewAdapter3); gridViews.add(gridView1); gridViews.add(gridView2); gridViews.add(gridView3); ///定義viewpager的PagerAdapter viewPagerHomeFragment.setAdapter(new PagerAdapter() { @Override public boolean isViewFromObject(View arg0, Object arg1) { // TODO Auto-generated method stub return arg0 == arg1; } @Override public int getCount() { // TODO Auto-generated method stub return gridViews.size(); } @Override public void destroyItem(ViewGroup container, int position, Object object) { // TODO Auto-generated method stub container.removeView(gridViews.get(position)); //super.destroyItem(container, position, object); } @Override public Object instantiateItem(ViewGroup container, int position) { // TODO Auto-generated method stub container.addView(gridViews.get(position)); return gridViews.get(position); } }); ///注冊(cè)viewPager頁(yè)選擇變化時(shí)的響應(yīng)事件 viewPagerHomeFragment.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrollStateChanged(int position) { // TODO Auto-generated method stub } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { // TODO Auto-generated method stub } @Override public void onPageSelected(int position) { // TODO Auto-generated method stub RadioButton radioButton = (RadioButton) radioGroup_index_fragment.getChildAt(position); radioButton.setChecked(true); } }); } ///定影GridView的Adapter public class MyGridViewAdapter extends BaseAdapter { private int page; private int count; public MyGridViewAdapter(int page, int count) { this.page = page; this.count = count; } @Override public int getCount() { // TODO Auto-generated method stub return 8; } @Override public Catogray getItem(int position) { // TODO Auto-generated method stub return catogarys.get(page * count + position); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub ViewHolder viewHolder = null; final Catogray catogary = catogarys.get(page * count + position); if (convertView == null) { viewHolder = new ViewHolder(); convertView = layoutInflater.inflate(R.layout.grid_fragment_home_item, null); viewHolder.grid_fragment_home_item_img = (ImageView) convertView.findViewById(R.id.grid_fragment_home_item_img); viewHolder.grid_fragment_home_item_txt = (TextView) convertView.findViewById(R.id.grid_fragment_home_item_txt); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.grid_fragment_home_item_img.setImageResource(catogary.getImage_source()); viewHolder.grid_fragment_home_item_txt.setText(catogary.getName()); viewHolder.grid_fragment_home_item_img. setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // TODO Auto-generated method stub Toast.makeText(TestViewpagerGridActivity.this, catogary.getName(), Toast.LENGTH_SHORT).show(); } }); return convertView; } } public class ViewHolder { public ImageView grid_fragment_home_item_img; public TextView grid_fragment_home_item_txt; } }
以上所述是小編給大家介紹的Android開(kāi)發(fā)仿大眾點(diǎn)評(píng)基于ViewPager+GridView實(shí)現(xiàn)橫向滑動(dòng)功能,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
android實(shí)現(xiàn)倒計(jì)時(shí)功能(開(kāi)始、暫停、0秒結(jié)束)
這篇文章主要為大家詳細(xì)介紹了android實(shí)現(xiàn)倒計(jì)時(shí)功能,開(kāi)始、暫停、0秒結(jié)束,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-09-09Android實(shí)現(xiàn)圖片設(shè)置圓角形式
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)圖片設(shè)置圓角形式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11Android?Studio使用自定義對(duì)話(huà)框效果
這篇文章主要為大家詳細(xì)介紹了Android?Studio使用自定義對(duì)話(huà)框效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05Android利用LitePal操作數(shù)據(jù)庫(kù)存取圖片
這篇文章主要為大家詳細(xì)介紹了Android利用LitePal操作數(shù)據(jù)庫(kù)存取圖片的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08Flutter開(kāi)發(fā)技巧RadialGradient中radius計(jì)算詳解
這篇文章主要為大家介紹了Flutter小技巧RadialGradient?中?radius?的計(jì)算詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01recycleview實(shí)現(xiàn)拼多多首頁(yè)水平滑動(dòng)效果
這篇文章主要為大家詳細(xì)介紹了recycleview實(shí)現(xiàn)拼多多首頁(yè)水平滑動(dòng)效,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-05-05android導(dǎo)入第三方j(luò)ar包報(bào)錯(cuò) 如何正確導(dǎo)入jar包
怎樣在android平臺(tái)上使用第三方j(luò)ar包,為什么我在引入了,編譯時(shí)沒(méi)有錯(cuò)誤,運(yùn)行時(shí)就有錯(cuò)誤,報(bào)無(wú)法實(shí)例化錯(cuò)誤,請(qǐng)問(wèn)這是什么原因,本文給于解決方法,需要了解的朋友可以參考下2012-12-12Android如何自定義EditText光標(biāo)與下劃線(xiàn)顏色詳解
在android開(kāi)發(fā)中 EditTextText是我們經(jīng)常用到的,我們使用時(shí)會(huì)有一些小問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于利用Android如何自定義EditText光標(biāo)與下劃線(xiàn)顏色的相關(guān)資料,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-08-08