編輯:關於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 List views;
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拍照適配方案
拍照功能實現Android 程序上實現拍照功能的方式分為兩種:第一種是利用相機的 API 來自定義相機,第二種是利用 Intent 調用系統指定的相機拍照。下面講的內容都
(Android 基礎(十三)) shape
介紹 簡單來說,shape就是用來在xml文件中定義形狀,代碼解析之後就可以當做Drawable一樣使用官方說明關於shape定義的drawable文件位置:res/dr
Android模仿微信收藏文件的標簽處理功能
最近需要用到微信的標簽功能(如下圖所示)。該功能可以添加已有標簽,也可以自定義標簽。也可以刪除已編輯菜單。研究了一番。發現還是挺有意思的,模擬實現相關功能。該
android 不同進程間的調用 AIDL 實現通訊服務
android 不同進程間的調用 AIDL 實現通訊服務 最近對aidl android 不同進程間的調用,不同運用間的調用做了一些嘗試: 步驟如下: