●뷰페이저(ViewPager)
- 화면을 좌우로 드래그해서 화면을 전환하는 기법이다.
- import android.support.v4.app.~~ 를 선언해야한다.
●예제
- 버튼을 클릭하거나 좌우로 드래그하면 화면이 전환되고 2초마다 화면이 자동으로 전환되는 예제
- MainActivity.java
package com.example.day0404; import android.os.Bundle; import android.os.Handler; import android.support.v4.view.ViewPager; import android.support.v7.app.ActionBarActivity; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; public class MainActivity extends ActionBarActivity implements OnClickListener{
Button btn[] = new Button[3]; ViewPager viewPager = null; Thread thread = null; Handler handler = null; int p=0; //페이지번호 int v=1; //화면 전환 뱡향
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
//viewPager viewPager = (ViewPager)findViewById(R.id.viewPager); MyViewPagerAdapter adapter = new MyViewPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(adapter); btn[0] = (Button)findViewById(R.id.btn_a); btn[1] = (Button)findViewById(R.id.btn_b); btn[2] = (Button)findViewById(R.id.btn_c); for(int i=0;i<btn.length; i++){ btn[i].setOnClickListener(this); }
handler = new Handler(){ public void handleMessage(android.os.Message msg) { if(p==0){ viewPager.setCurrentItem(1); p++; v=1; }if(p==1&&v==0){ viewPager.setCurrentItem(1); p--; }if(p==1&&v==1){ viewPager.setCurrentItem(2); p++; }if(p==2){ viewPager.setCurrentItem(1); p--; v=0; } } };
thread = new Thread(){ //run은 jvm이 쓰레드를 채택하면, 해당 쓰레드의 run메서드를 수행한다. public void run() { super.run(); while(true){ try { Thread.sleep(2000); handler.sendEmptyMessage(0); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); }
} } }; thread.start();
} @Override public void onClick(View v) {
switch(v.getId()){ case R.id.btn_a: viewPager.setCurrentItem(0); Toast.makeText(this,"A버튼", Toast.LENGTH_SHORT).show(); break; case R.id.btn_b: viewPager.setCurrentItem(1); Toast.makeText(this,"B버튼", Toast.LENGTH_SHORT).show(); break; case R.id.btn_c: viewPager.setCurrentItem(2); Toast.makeText(this,"C버튼", Toast.LENGTH_SHORT).show(); break; default: break;
}
} } |
- activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/LinearLayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="${relativePackage}.${activityClass}" >
<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:id="@+id/btn_a" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="A" style="@style/Widget.AppCompat.ActionButton"/> <Button android:id="@+id/btn_b" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="B" style="@style/Widget.AppCompat.ActionButton"/> <Button android:id="@+id/btn_c" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="C" style="@style/Widget.AppCompat.ActionButton"/>
</LinearLayout>
<android.support.v4.view.ViewPager android:id="@+id/viewPager" android:layout_width="match_parent" android:layout_height="match_parent"/>
</LinearLayout> |
- MyViewPagerAdapter.java
package com.example.day0404; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentStatePagerAdapter; public class MyViewPagerAdapter extends FragmentStatePagerAdapter{
/* * 이 클래스의 부모생성자 호출시 인수로 반드시 FragmentManager객체를 넘겨야한다. * 이 객체는 Activity에서만 만들수 있고, 여기서사용중인 Fragment가 v4이기 때문에 * Activity중에서도 ActionBarActivity에서 얻어와야한다. */
Fragment[] fragments = new Fragment[3];
public MyViewPagerAdapter(FragmentManager fm) { super(fm); fragments[0] = new FragmentA(); fragments[1] = new FragmentB(); fragments[2] = new FragmentC(); }
//아래의 메서드들의 호출 주체는 ViewPager이다. //ListView와 원리가 같다.
/* * 여러 프레그먼트 중 어떤 프레그먼트를 보여줄지 결정 */ public Fragment getItem(int arg0) { return fragments[arg0]; }
/* * 보여질 프레그먼트가 몇개인지 결정 */ public int getCount() { return fragments.length; }
} |
- FragmentA.java
package com.example.day0404; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class FragmentA extends Fragment{
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_a, container, false); } }
|
- fragment_a.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="#3DB7CC"> </LinearLayout>
|
- FragmentB.java, fragment_b.xml, FragmentC.java, fragment_c.xml 동일
'프로그래밍 > 안드로이드' 카테고리의 다른 글
안드로이드 오픈소스 ViewPagerIndicator (0) | 2015.04.15 |
---|---|
안드로이드 SQLite (0) | 2015.04.08 |
안드로이드 액션바 (ActionBar) (0) | 2015.04.01 |
안드로이드 프래그먼트(Fragment) (0) | 2015.04.01 |
안드로이드 애니메이션2 (0) | 2015.03.30 |
댓글