根据json ArrayList
尺寸创建TextView
' s。
使用课程Display
,使每个TextView
高度和宽度覆盖整个屏幕。
MOTTO
屏幕上只能显示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
修改
我发现此Question与ios
有关。正在搜索android
我正在尝试开发类似于SimplEye的应用 将由视障人士使用。
为此,我需要控制屏幕上的滑动,这样才能通过滑动帮助处理整个应用程序。
ViewPager,ViewFlipper,SimpleOnGestureListener与要求不匹配。
请建议应该使用什么技术。 谢谢
答案 0 :(得分:2)
基于这个问题,我建议使用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;
}
}
答案 1 :(得分:0)
使用ViewPager滑动视图(仅通过滑动手势;如果您需要在时间内滑动,则ViewFlipper是更好的方法)。让您的TR
SousTotal
/ ViewPager
同时layout_width
(在xml布局中定义layout_height
而不是通过代码)。另外,您也可以match_parent
ViewPager
/ TextView
layout_width
,因此根本不需要layout_height
课程。
编辑。根据最新版本,TS需要处理整个应用程序中的手势导航。我建议如下:
match_parent
内部实施Display
方法,在这种情况下,该方法将接收所有触摸事件。在该方法中,您可以添加任何所需的手势处理。onTouchEvent
实施并覆盖Activity
/ ViewGroup
种方法,并手动执行任何手势处理。在这两种情况下,您都需要自己创建所有手势检测逻辑。
这些链接可能会有所帮助
从未这样做,但第一个链接似乎是最有用的。它表示您可以首先创建某种姿势描述,然后手势API可以检查执行的任何手势以匹配该描述。