編輯:關於Android編程
關於ViewPager的描述
1)ViewPager類直接繼承了ViewGroup類,所有它是一個容器類,可以在其中添加其他的view類。
2)ViewPager類需要一個PagerAdapter適配器類給它提供數據。
3)ViewPager經常和Fragment一起使用,並且提供了專門的FragmentPagerAdapter和FragmentStatePagerAdapter類供Fragment中的ViewPager使用。
在編寫ViewPager的應用的使用,還需要使用兩個組件類分別是PagerTitleStrip類和PagerTabStrip類,PagerTitleStrip類直接繼承自ViewGroup類,而PagerTabStrip類繼承PagerTitleStrip類,所以這兩個類也是容器類。但是有一點需要注意,在定義XML的layout的時候,這兩個類必須是ViewPager標簽的子標簽,不然會出錯。
實現步驟
1、創建一個類擴展自PagerAdapter
對於PagerAdapter類,必須至少實現如下的4個方法:
//添加view
public Object instantiateItem(ViewGroup container, int position)
//釋放view
public void destroyItem(ViewGroup container, int position,Object object)
//返回view的個數
public int getCount()
//判斷當前view是否為我們需要的對象
public boolean isViewFromObject(View arg0, Object arg1)
ViewPagerAdapter.java
public class ViewPagerAdapter extends PagerAdapter { private Listviews; private Context context; public ViewPagerAdapter(List views,Context context){ this.context = context; this.views=views; } @Override public void destroyItem(ViewGroup container, int position, Object object) { ((ViewPager)container).removeView(views.get(position)); } @Override public Object instantiateItem(ViewGroup container, int position) { container.addView(views.get(position)); return views.get(position); } @Override public int getCount() { return views.size(); } //判斷當前view是否為我們需要的對象 @Override public boolean isViewFromObject(View view, Object object) { return (view == object); } }
2、創建一個類Guide來承載viewPager,將其擴展自Activity,在頁面被選中時,會有小圓點顯示當前被選中的pager,並自定義添加enter()方法進入應用主界面
public class Guide extends Activity implements ViewPager.OnPageChangeListener{ private ViewPager vp; private ViewPagerAdapter viewPagerAdapter; private List<view> views; private ImageView[] dots; private int[] ids= {R.id.iv1,R.id.iv2,R.id.iv3}; private Button btnEnter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.guide); intiView(); initDots(); enter(); } private void intiView(){ LayoutInflater inflater = LayoutInflater.from(this); views = new ArrayList<view>(); views.add(inflater.inflate(R.layout.one,null)); views.add(inflater.inflate(R.layout.two,null)); views.add(inflater.inflate(R.layout.three,null)); viewPagerAdapter = new ViewPagerAdapter(views,this); vp = (ViewPager) findViewById(R.id.viewpager); vp.setAdapter(viewPagerAdapter);//獲取適配器中的數據 vp.setOnPageChangeListener(this);//添加回調函數進行監聽 } private void enter(){ btnEnter = (Button) views.get(2).findViewById(R.id.btnEnter); btnEnter.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(Guide.this,MainActivity.class); startActivity(intent); finish(); } }); } //初始化小圓點的ImageView private void initDots(){ dots = new ImageView[views.size()]; for (int i = 0;i<views.size();i++)
3、創建guide.xml,並向其添加子標簽ViewPager和保存小圓點的3個ImageView
4、創建三個view:one.xml,tow.xml,three.xml,他們的子標簽是一個ImageView
one.xml
two.xml
three.xml
5、添加啟動歡迎界面,在歡迎界面會停留數秒,若是第一次啟動,則會跳轉至引導界面,否則跳轉至程序主界面
welcome
public class Welcome extends AppCompatActivity { private static final int TIME = 10000; private static final int GO_HOME = 1000; private static final int GO_GUIDE = 1001; private boolean isFirstIn = false; private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what){ case GO_HOME: goHome(); break; case GO_GUIDE: goGuide(); break; } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_welcome); init(); } private void init(){ //執行成功的話,會將數據保存在homeTest.xml文件中 SharedPreferences preferences = getSharedPreferences("homeTest",MODE_PRIVATE); //第一個參數是key,第二個參數是默認值 isFirstIn = preferences.getBoolean("isFirstIn",true); if (!isFirstIn){ handler.sendEmptyMessageDelayed(GO_HOME,TIME); } else { handler.sendEmptyMessageDelayed(GO_GUIDE,TIME); //利用edit()方法獲取Editor對象 SharedPreferences.Editor editor = preferences.edit(); editor.putBoolean("isFirstIn",false); editor.commit(); } } private void goHome(){ Intent intent = new Intent(Welcome.this,MainActivity.class); startActivity(intent); finish(); } private void goGuide(){ Intent intent = new Intent(Welcome.this,Guide.class); startActivity(intent); finish(); } }
6、activity_welcome.xml
7、在manifest中,將Activity Welcome設置為啟動項
以上的代碼是本人在看視頻教程中編寫的代碼,純粹之是為了記錄自己的學習過程,以便在以後學習Android過程中忘記時可以再回顧
拍照功能實現Android 程序上實現拍照功能的方式分為兩種:第一種是利用相機的 API 來自定義相機,第二種是利用 Intent 調用系統指定的相機拍照。下面講的內容都
介紹 簡單來說,shape就是用來在xml文件中定義形狀,代碼解析之後就可以當做Drawable一樣使用官方說明關於shape定義的drawable文件位置:res/dr
最近需要用到微信的標簽功能(如下圖所示)。該功能可以添加已有標簽,也可以自定義標簽。也可以刪除已編輯菜單。研究了一番。發現還是挺有意思的,模擬實現相關功能。該
android 不同進程間的調用 AIDL 實現通訊服務 最近對aidl android 不同進程間的調用,不同運用間的調用做了一些嘗試: 步驟如下: