Ta muốn phần đọc thơ có thể vuốt sang bài mới, người dùng chọn bài
nào chuyển sang xong cứ vuốt là đến bài tiếp theo.
Ví dụ người dùng chọn bài 5, đọc xong vuốt sang bài 6, 7, 8 rồi lại
quay về bài 1. Tức là không cần thoát về màn hình trước, cứ vuốt ngang là ra hết
các bài.
Ta sẽ dùng ViewParge để làm.
File xml của class đọc lúc này như sau.
<?xml version="1.0"
encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ImageSwitcher
android:id="@+id/ImageSwitcher01"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_centerInParent="true"
android:background="@drawable/nen"
>
</ImageSwitcher>
<LinearLayout
android:id="@+id/l"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="80dp"
android:orientation="horizontal"
>
</LinearLayout>
</RelativeLayout>
Không có textView nào vì ta sẽ vẽ ra textView trong code.
Thêm vào đầu class đọc đoạn sau.
implements
ViewPager.OnPageChangeListener
Ta đã có sẵn 3 mảng ten, tacgia, mang, hãy thêm các đoạn sau vào
khai báo bên trên Override.
static String[] ten2 = new String[8];
static String[] tacgia2 = new String[8];
static String[] ar = new String[8];
static String[] ar2 = new String[8];
private ViewPager mViewPager;
static
LinearLayout l;
Bên dưới dòng giữ cho màn hình luôn bật, ta sửa thành.
l =
(LinearLayout) findViewById(R.id.l);
mViewPager = new ViewPager(this);
mViewPager.setLayoutParams(new
ListView.LayoutParams(
ListView.LayoutParams.MATCH_PARENT,500));
mViewPager.setOnPageChangeListener(this);
mViewPager.setAdapter(new HeaderAdapter(this));
l.addView(mViewPager);
Intent in = getIntent();
Bundle bun = in.getExtras();
int vitri = bun.getInt("gi");
String tenbai = bun.getString("gi2");
Đó là ta khai báo viewParge, nhét nó vào LinearLayout, dùng Intent
lấy vị trí bài đọc chuyển sang.
Bây giờ ta sẽ đọc các bài thơ thành chuỗi rồi cho vào mảng ar.
for (int i = 0; i < mang.length; i++) {
InputStream
inp = this.getResources().openRawResource((Integer) mang[i]);
try
{
byte[] buffer = new byte[inp.available()];
while
(inp.read(buffer) != -1);
String jsontext = new
String(buffer);
ar[i]=jsontext;
}
catch (IOException
ke)
{
//return null;
}
}
Ta dùng vòng lặp để đọc luôn từ bài đầu đến hết, cho vào mảng chuỗi.
Bây giờ có một vấn đề là ta phải đảo mảng, cho vị trí bài thơ được
chọn đọc lên đầu, các vị trí sau cứ thế tiếp tục, đến hết bài thứ 8 lại quay về
đầu tiên bài 1.
Mục đích để khi cho vào ViewParge, người dùng vuốt sang thì các
bài cứ thế theo nhau hiện ra.
for (int i = 0; i <
8; i++) {
int so=vitri+i;
if(so>7){
so=so-8;
}
ten2[i]=ten[so];
tacgia2[i]=tacgia[so];
ar2[i]=ar[so];
}
Vị trí bài chọn sẽ lên đầu trong các mảng có số 2, tiếp theo cứ thế
nối đuôi vào.
Bây giờ copy đoạn sau xuống trên cái ngoặc đóng cuối cùng.
@Override
public void onPageScrolled(int position,
float positionOffset,
int
positionOffsetPixels) { }
@Override
public void onPageSelected(int position) { }
@Override
public void
onPageScrollStateChanged(int state) {
boolean isScrolling =
state != ViewPager.SCROLL_STATE_IDLE; //ListView.requestDisallowInterceptTouchEvent(isScrolling);
}
private static class HeaderAdapter extends PagerAdapter {
private Context mContext;
public
HeaderAdapter(Context context) {
mContext = context;
}
@Override
public int getCount() {
return 8;
}
@Override
public Object
instantiateItem(ViewGroup container,int position) {
LinearLayout
l = new LinearLayout(mContext);
l.setOrientation(LinearLayout.VERTICAL);
TextView
t = new TextView(mContext);
TextView t2 = new TextView(mContext);
TextView t3 = new TextView(mContext);
t.setGravity(Gravity.CENTER);
t2.setGravity(Gravity.CENTER);
t3.setGravity(Gravity.CENTER);
t.setTextColor(Color.parseColor("#800000"));
t.setTypeface(Typeface.MONOSPACE, Typeface.BOLD);
t.setHeight(48);
t2.setTextColor(Color.BLACK);
t2.setTypeface(Typeface.createFromAsset(mContext.getAssets(), "Roboto-Italic.ttf"));
t3.setTextColor(Color.BLUE);
t.setTextSize(20);
t2.setTextSize(18);
t3.setTextSize(20);
t.setText(ten2[position]);
t2.setText(ar2[position]);
t3.setText(tacgia2[position]);
LayoutParams pa = new
LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
l.addView(t, pa);
l.addView(t2, pa);
l.addView(t3, pa);
container.addView(l);
return l;
}
@Override
public void
destroyItem(ViewGroup container,int position, Object object) {
View page = (View) object;
container.removeView(page);
}
@Override
public boolean
isViewFromObject(View view,Object object) {
return (view ==
object);
}
}
Đoạn code này.
@Override
public int getCount() {
return 8;
}
Số 8 là kích thước mảng, nếu thay đổi số bài thơ thì cũng thay đổi
số 8 này.
Chú ý phần vẽ ra 3 textView, dùng nó để hiển thị tên bài, nội
dung, tên tác giả.
Đoạn bên dưới ta set vị trí, tô màu, chọn font, set chữ cho các
textView.
Bây giờ chạy thử, bạn sẽ thấy class đọc có thể vuốt sang bài tiếp
theo.
Thử xóa chữ static nào đó trên đầu xem sao,
Eclipse, Android Studio sẽ báo lỗi và bảo bạn phải thêm vào. Nó có nghĩa là biến
tĩnh, nhưng nếu ta không biết, quên không cho vào thì sẽ được nhắc như vậy nên
thực tế ta không cần biết nó là gì.
Cứ thực hành mà không cần nhìn đến nó.
No comments:
Post a Comment