編輯:關於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 { Listviews = 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())); } 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; } }
以上是viewPager的最簡單的應用。
前言回過頭來審視之前做過的Android項目,發覺自己重新開發時忽然間不知所措了,間隔了太長時間沒有開發導致自己的Android技能知識急劇下降。溫故而知新。廢話少說,進
近期在做圖片上傳的功能,從相機拍攝或從相冊選區。就研究了這方面的東西一.圖片的基本知識1.文件形式(即以二進制形式存在於硬盤上)獲取大小(Byte):File.lengt
1)首先先將gitlab上的開發項目clone到本地(可以使用命令行或者管理工具,具體操作在GitLab中已經涉及,這裡不再贅述),然後導入到AndroidStudio中
上一篇已經把王略中的圖片獲取到了。生活中有這麼些場景:微信聯網打開別人照片後,當手機斷網的時候再去點擊人家的額圖片還能完整看到。這時候,已經不是去網路中獲取圖片了,其實微