[英]Views Navigation Using Swipe Gesture android
基於json ArrayList
大小,我正在創建TextView
。
通過使用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不符合要求。
請建議應使用哪種技術。 謝謝
基於這個問題,我可以建議使用ViewPager
這是您的MOTTO的替代選擇,而不是問題的解決方案
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
ViewPager
都為match_parent
(不通過代碼在xml布局中定義ViewPager
)。 另外,也使TextView
layout_width
/ layout_height
match_parent
因此您根本不需要Display
類。
編輯。 根據最新版本,TS需要處理整個應用程序中的手勢導航。 我建議以下內容:
Activity
實現onTouchEvent
方法,在這種情況下,它將接收所有觸摸事件。 在該方法中,您可以添加所需的任何手勢處理。 ViewGroup
實現,並在那里覆蓋onInterceptTouchEvent
/ onTouchEvent
方法,並在那里手動執行任何手勢處理。 在這兩種情況下,您都需要自己創建所有手勢檢測邏輯。
這些鏈接可能會有所幫助
從來沒有,但是第一個鏈接似乎是最有用的。 它說您可以首先創建某種手勢描述,然后手勢API可以檢查所執行的任何手勢以匹配該描述。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.