Навигация по представлениям с помощью жеста Swipe android
На основе JSON ArrayList
размер я создаю TextView
"S.
Используя класс Display
сделал каждый TextView
высота и ширина, чтобы покрыть весь экран.
ДЕВИЗ
Только 1
TextView
должен быть виден на экране. Проведя пальцем, он должен перейти к следующему виду, который снова займет весь экран.Проведите пальцем вниз и проведите пальцем вверх, чтобы переместить экраны, т. Е. Представления... проведите пальцем влево и проведите пальцем вправо для выполнения некоторых других задач, таких как изменение активности
Размах включен с помощью GestureDetector.SimpleOnGestureListener
До сих пор я пытался использовать ViewFlipper
, TextView
массив для включения переключения между TextView
.Но не удалось:(
Фрагмент кода:
for(int i=0;i<name.size();i++)
{
text = new TextView(MainActivity.this);
text.setText(name.get(i));
text.setId(i);
text.setTextColor(Color.parseColor("#000000"));
text.setLayoutParams(new LinearLayout.LayoutParams(realWidth, realHeight));
text.setGravity(Gravity.CENTER);
text.setTextSize(40);
text.setClickable(true);
vf.addView(text);
/*
//I've tried the following code while using TextView array
myTextViews[i] = text;
myTextViews[i].setId(i);
myTextViews[i].setTextColor(Color.BLACK);
myTextViews[i].setText(name.get(i));
myTextViews[i].setGravity(Gravity.CENTER);
myTextViews[i].setTextSize(40);
myTextViews[i].setLayoutParams(new LinearLayout.LayoutParams(realWidth, realHeight));
myTextViews[i].onWindowFocusChanged(false);
LL.addView(myTextViews[i]);
*/
View lines = new View(getApplicationContext());
lines.setBackgroundColor(Color.parseColor("#000000"));
lines.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 1));
vf.addView(lines);
final int finalI = i;
text.setOnTouchListener(new MainActivity()
{
@Override
public void onSwipeLeft()
{
if (vf.getDisplayedChild() == 0)
Toast.makeText(MainActivity.this, "left", Toast.LENGTH_SHORT).show();
else
vf.showNext();
}
@Override
public void onSwipeRight()
{
if (vf.getDisplayedChild() == 0)
Toast.makeText(MainActivity.this, "right", Toast.LENGTH_SHORT).show();
else
vf.showPrevious();
}
});
}
Ошибки:
При использовании
ViewFlipper
E/MessageQueue-JNI﹕ Исключение в обратном вызове MessageQueue: handleReceiveCallback
Массив:
E / InputEventReceiver ﹕ Исключительная диспетчеризация входного события. - java.lang.ArrayIndexOutOfBoundsException
РЕДАКТИРОВАТЬ
Я нашел этот вопрос, связанный с ios
, Искать то же самое для android
Я пытаюсь разработать приложение, похожее на SimplEye, которое будет использоваться людьми с ограниченными возможностями.
Для этого мне нужно контролировать свайпы на экране, чтобы все приложение можно было обрабатывать только с помощью свайпов.
ViewPager, ViewFlipper, SimpleOnGestureListener не соответствуют требованию.
Пожалуйста, предложите, какую методику следует использовать. Спасибо
2 ответа
Основывается на вопросе, что я могу предложить, это использовать ViewPager
которая является альтернативой для вашего девиза, а не решения вашей проблемы
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
ViewPagerActivity
public class ViewPagerActivity extends Activity {
String text[] = {"A", "B",
"C", "D",
"E", "F",
"G", "H"};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyPagerAdapter adapter = new MyPagerAdapter(this, text);
ViewPager myPager = (ViewPager) findViewById(R.id.viewpager);
myPager.setAdapter(adapter);
myPager.setCurrentItem(0);
//set Page Change Listner. to get callback on page changed or swiped
myPager .setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
Log.e("Page Changed ", " YES ");
/// here you can check & perform on changed
Log.e("Current TextView Text ", text[position]);
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
}
MyPagerAdapter
public class MyPagerAdapter extends PagerAdapter {
Activity activity;
int txtarray[];
public MyPagerAdapter(Activity act, int[] imgArra) {
txtarray = imgArra;
activity = act;
}
public int getCount() {
return txtarray.length;
}
public Object instantiateItem(View collection, int position) {
TextView view = new TextView(activity);
view.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.FILL_PARENT));
view.setText(txtarray[position]);
((ViewPager) collection).addView(view, 0);
return view;
}
@Override
public void destroyItem(View arg0, int arg1, Object arg2) {
((ViewPager) arg0).removeView((View) arg2);
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == ((View) arg1);
}
@Override
public Parcelable saveState() {
return null;
}
}
Используйте ViewPager для скольжения видов (только жестом смахивания; если вам нужно смахивать во время, тогда ViewFlipper лучше подходит). Сделай свой ViewPager
layout_width
/layout_height
оба match_parent
(определить ViewPager
в формате XML не через код). Также сделайте свой TextView
layout_width
/layout_height
match_parent
тоже, таким образом, вам не нужно Display
класс вообще.
РЕДАКТИРОВАТЬ. Согласно последнему изданию, TS должен обрабатывать жесты навигации по всему приложению. Я предлагаю следующее:
- старайтесь не использовать какие-либо виджеты, которые обрабатывают жесты (щелчок) сами по себе (кнопка, флажок и т. д.). Используйте только неуправляемые виды и реализуйте
onTouchEvent
метод внутри вашегоActivity
который получит все сенсорные события в этом случае. В этом методе вы можете добавить любую обработку жестов, какую захотите. - Вы можете создать свой собственный
ViewGroup
реализация и переопределить тамonInterceptTouchEvent
/onTouchEvent
методы и выполнять там любые жесты обработки вручную.
В обоих случаях вам нужно создать всю логику обнаружения жестов самостоятельно.
Эти ссылки могут быть полезны
- Создание простого приложения для жестов в Android
- Как добавить наши собственные жесты в Android?
- Обнаружение общих жестов
Никогда этого не делал, но первая ссылка кажется наиболее полезной. В нем говорится, что вы можете сначала создать какое-то описание жеста, а затем API-интерфейс жеста может проверить любой выполненный жест на соответствие этому описанию.