編輯:關於Android編程
寫在前面:
最近發現,對一些基本用法,隔一段時間不用又會無從下手。因此,慢慢養成了寫總結博客的習慣,一方面加深印象理清知識點,另一方面,把自己的學習總結分享給大家。
1、ViewPager是什麼?
ViewPager繼承自ViewGroup,也是一個容器類。實際上是一個view的管理器,實現左右滑動的功能。通常我們需要ViewPager+adapter實現左右滑動功能。
2、一個簡單的ViewPager Demo
(1)首先ViewPager的xml布局:activity_main.xml。這樣就定義好了容納view的容器。注意ViewPager引入時需要寫完整的包名android.support.v4.view.ViewPager.
(2)准備數據源——待左右滑動顯示的view們。我這裡只是簡單放了三個圖片。
ListgetViews(){ List views = new ArrayList<>(); ImageView imageView = new ImageView(this); imageView.setImageDrawable(ContextCompat.getDrawable(this,R.drawable.morning)); views.add(imageView); ImageView imageView1 = new ImageView(this); imageView1.setImageDrawable(ContextCompat.getDrawable(this,R.drawable.afternoon)); views.add(imageView1); ImageView imageView2 = new ImageView(this); imageView2.setImageDrawable(ContextCompat.getDrawable(this,R.drawable.night)); views.add(imageView2); return views; }
(3)實現自定義Adapter,一般采用繼承自PagerAdapter。
PagerAdapter是一個抽象類,是將待顯示views顯示到ViewPager中的橋梁。有興趣的話可以查看一下PagerAdapter源碼,PagerAdapter一系列方法的調用最終表現為頁面的切換,startUpdate()方法(意味著ViewPager內容即將改變)→instantiateItem()方法(頁面填充和初始化)→destroyItem()(移除view)。
一般而言,實現ViewAdapter至少需要實現4中方法:
/**
* 待顯示views的數目
* @return
*/
@Override
public int getCount() {
return 0;
}
/**
* 把待顯示view添加到viewpager中,進行初始化操作。一般返回view本身(其實只要返回view的標識就好了)
* @param container
* @param position
* @return
*/
@Override
public Object instantiateItem(ViewGroup container, int position) {
return super.instantiateItem(container, position);
}
/**
* 移除view
* @param container
* @param position
* @param object
*/
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
super.destroyItem(container, position, object);
}
/**
* 判斷視圖是否與給定的key(參數中的object)相一致。viewpager使用key對每個頁面進行管理,其實我們在instantiateItem中返回的就是這個key,如果instantiateItem返回的是view,只要判斷view和key是否相等就好了
* @param view
* @param object
* @return
*/
@Override
public boolean isViewFromObject(View view, Object object) {
return false;
}
下面是我的一個簡單實現:
public class MyViewPagerAdapter extends PagerAdapter {
List views = null;
public MyViewPagerAdapter(List views) {
//把待顯示的view們傳遞進來
this.views = views;
}
/**
* 初始化指定位置頁面 需要返回頁面的唯一標識(通常情況下返回view本身)
* @param container
* @param position
* @return
*/
@Override
public Object instantiateItem(ViewGroup container, int position) {
//把當前要顯示的view添加到viewPager中
container.addView(views.get(position));
return views.get(position);
}
@Override
public int getCount() {
return views.size();
}
/**
* 負責移除指定位置的view
* @param container
* @param position
* @param object
*/
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(views.get(position));
}
@Override
public boolean isViewFromObject(View view, Object object) {
//由於前面返回的view本身作為view標識,這裡直接判斷是否相等就好了
return view == object;
}
}
接下來看一下MainActivity.java的代碼,就能實現view左右滑動的功能。
這裡寫代碼片public class MainActivity extends AppCompatActivity {
private ViewPager viewPager = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager = (ViewPager)findViewById(R.id.myviewpager);
viewPager.setAdapter(new MyViewPagerAdapter(getViews()));
}
List getViews(){
List views = new ArrayList<>();
ImageView imageView = new ImageView(this);
imageView.setImageDrawable(ContextCompat.getDrawable(this,R.drawable.morning));
views.add(imageView);
ImageView imageView1 = new ImageView(this);
imageView1.setImageDrawable(ContextCompat.getDrawable(this,R.drawable.afternoon));
views.add(imageView1);
ImageView imageView2 = new ImageView(this);
imageView2.setImageDrawable(ContextCompat.getDrawable(this,R.drawable.night));
views.add(imageView2);
return views;
}
}
以上是viewPager的最簡單的應用。
Android進階(二十三)Android開發過程之實例講解
前言回過頭來審視之前做過的Android項目,發覺自己重新開發時忽然間不知所措了,間隔了太長時間沒有開發導致自己的Android技能知識急劇下降。溫故而知新。廢話少說,進
Android圖像常用壓縮技術
近期在做圖片上傳的功能,從相機拍攝或從相冊選區。就研究了這方面的東西一.圖片的基本知識1.文件形式(即以二進制形式存在於硬盤上)獲取大小(Byte):File.lengt
Android開發之Android studio使用git gitlab(二)
1)首先先將gitlab上的開發項目clone到本地(可以使用命令行或者管理工具,具體操作在GitLab中已經涉及,這裡不再贅述),然後導入到AndroidStudio中
Android簡易實戰教程--第二十六話《網絡圖片查看器在本地緩存》
上一篇已經把王略中的圖片獲取到了。生活中有這麼些場景:微信聯網打開別人照片後,當手機斷網的時候再去點擊人家的額圖片還能完整看到。這時候,已經不是去網路中獲取圖片了,其實微