Я хочу, чтобы нажимать на кнопки, чтобы перемещаться вперед и назад через несколько видов, а также прокручивать влево или вправо между видами.Призрачный эффект: два вида друг на друга. Зачем?
Итак, я решил реализовать ViewPager для прокрутки между несколькими видами.
Вот мой код:
расположение XML:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/white"
>
<android.support.v4.view.ViewPager
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/viewPager"/>
<ImageView
android:id="@+id/apple"
android:layout_width="200sp"
android:layout_height="150sp"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:src="@drawable/apple"
android:contentDescription="apple"/>
<TextView
android:id="@+id/number"
android:layout_width="100sp"
android:layout_height="55sp"
android:layout_marginTop="47dp"
android:layout_below="@+id/apple" android:layout_alignStart="@+id/apple"/>
<Button
android:id="@+id/save"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/save"
android:layout_alignTop="@+id/ignore" android:layout_toStartOf="@+id/apple"/>
<Button
android:id="@+id/ignore"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/Ignore"
android:layout_alignParentBottom="true" android:layout_toEndOf="@+id/apple"/>
<ImageView
android:id="@+id/back_nav_arrow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_action_back"
android:contentDescription="back">
</ImageView>
<ImageView
android:id="@+id/forward_nav_arrow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_action_forward"
android:layout_alignParentTop="true" android:layout_alignParentEnd="true"
android:contentDescription="forward">
</ImageView>
</RelativeLayout>
Вот моя активность:
public class CollectionPager extends Activity {
private PagerAdapter pagerAdapter;
ActionBar actionbar;
MyAdapter myAdapter;
private Context context;
private TextView textView;
private int currentPage;
ViewPager viewPager;
int progressChanged = 0;
public static final String TAG = "CollectionPager";
public CollectionPager() {
context = this;
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.collection);
viewPager = (ViewPager) findViewById(R.id.viewPager);
myAdapter = new MyAdapter();
viewPager.setAdapter(myAdapter);
ActionBar actionBar = getActionBar();
if (actionBar != null) {
actionBar.hide();
}
//Initialize the back button and add an onClick event listener to the button
final ImageView back_button = (ImageView) findViewById(R.id.back_nav_arrow);
back_button.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
//it doesn't matter if you're already in the first item
viewPager.setCurrentItem(viewPager.getCurrentItem() - 1);
}
});
//Initialize the forward button and add an onClick event listener to the button
final ImageView forward_button = (ImageView) findViewById(R.id.forward_nav_arrow);
forward_button.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
//it doesn't matter if you're already in the last item
viewPager.setCurrentItem(viewPager.getCurrentItem() + 1);
}
});
final Button save_button = (Button) findViewById(R.id.save);
save_button.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
//save
}
});
final Button ignore_button = (Button) findViewById(R.id.ignore);
ignore_button.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
//ignore
}
});
//Attach the page change listener inside the activity
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
// This method will be invoked when the current page is scrolled
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
//This method will be invoked when a new page becomes selected
@Override
public void onPageSelected(int position) {
//get position
currentPage = position;
}
// Called when the scroll state changes:
// SCROLL_STATE_IDLE, SCROLL_STATE_DRAGGING, SCROLL_STATE_SETTLING
@Override
public void onPageScrollStateChanged(int i) {
//get state
}
});
}
private class MyAdapter extends PagerAdapter {
int NumberOfPages = 10;
LayoutInflater inflater = (LayoutInflater) CollectionPager.this
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
@Override
public int getCount() {
return NumberOfPages;
}
@Override
public Object instantiateItem(ViewGroup parent, int position) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.collection, parent, false);
ImageView imageView = (ImageView) view
.findViewById(R.id.apple);
imageView.setImageResource(R.drawable.apple);
parent.addView(view,0);
return view;
}
@Override
public void destroyItem(ViewGroup parent, int position, Object object) {
((ViewPager) parent).removeView((View) object);
}
@Override
public boolean isViewFromObject(View parent, Object object) {
return parent== ((View) object);
}
@Override
public Parcelable saveState() {
return null;
}
}
}
детектируется onClickEvent но вот скриншот того, что происходит с точки зрения. Два взгляда друг на друга. Один вид фиксируется на экране, а другой - прокручивается правильно.
Я не знаю, почему это происходит. Что вызывает это в моем коде?
EDIT: Вот видео, выдвигая на первый план вопрос: https://www.dropbox.com/s/6x5qa16xyttzrwa/VIDEO0041.mp4?dl=0
я хотел бы посоветовать вам взять одну горизонтальную линейную компоновку, в которой положить ваши все 4 кнопки, т.е. сохранить, игнорировать .... так что на и поставьте эту линейную раскладку ниже, чтобы просмотреть пейджер, или вы можете поставить на просмотр пейджер, сохранив нижний смысл вашего линейного макета. Надеюсь, это поможет вам. –
Можете ли вы привести мне пример? Вы хотите использовать horizontalScrollView? Должен ли я включать viewpager внутри родительского макета над кнопками? –