Android 视图翻转器不翻转
我已经阅读了关于这一主题的所有三个问题,其中一个提到了完全相同的问题和相同的步骤,但没有解决方案(见下文) 在这个SO链接中,我和James有完全相同的问题 我尝试过几乎相同的一套技巧。我确信我的视图正在翻转,但除了第一个视图,我看不到新的图片 在阅读了以下链接的讨论之后,我相信詹姆斯和我可能犯了同样的错误,但讨论没有提到决议 我还通读了其他关于这个问题的答案,但没有一个给出正确的解决方案 有人能帮我吗?这是我正在使用的代码。我正在尝试创建一个图像列表,每个图像都由一个视图翻转器控制。如果要翻转图像,它将转换为带有图像名称的文本视图Android 视图翻转器不翻转,android,view,viewflipper,Android,View,Viewflipper,我已经阅读了关于这一主题的所有三个问题,其中一个提到了完全相同的问题和相同的步骤,但没有解决方案(见下文) 在这个SO链接中,我和James有完全相同的问题 我尝试过几乎相同的一套技巧。我确信我的视图正在翻转,但除了第一个视图,我看不到新的图片 在阅读了以下链接的讨论之后,我相信詹姆斯和我可能犯了同样的错误,但讨论没有提到决议 我还通读了其他关于这个问题的答案,但没有一个给出正确的解决方案 有人能帮我吗?这是我正在使用的代码。我正在尝试创建一个图像列表,每个图像都由一个视图翻转器控制。如果要翻
public class CustomListViewAdapter extends ArrayAdapter<ScreenObject> {
private static final int SWIPE_MIN_DISTANCE = 70;
private static final int SWIPE_MAX_DISTANCE = 50;
private static final int SWIPE_THRESHOLD_VELOCITY = 120;
public CustomListViewAdapter(Context new_context, int resource_id,
List<ScreenObject> items, BitmapManager new_bitmap_manager) {
super(new_context, resource_id, items);
bitmap_manager = new_bitmap_manager;
}
class SwipeGestureDetector extends SimpleOnGestureListener {
private ScreenObjectViewFlipper view_flipper;
SwipeGestureDetector(ScreenObjectViewFlipper flip_view) {
view_flipper = flip_view;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
Context context = MainActivity.application_context;
try {
if (Math.abs(e1.getX() - e2.getX()) > SWIPE_MAX_DISTANCE)
return false;
// Top to bottom swipe
if (e1.getY() - e2.getY() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityY) > SWIPE_THRESHOLD_VELOCITY) {
Log.i("screenshotsaver", "flig up");
view_flipper.setInAnimation(AnimationUtils.loadAnimation(context,
R.anim.in_from_bottom));
view_flipper.setOutAnimation(AnimationUtils.loadAnimation(context,
R.anim.out_to_top));
// controlling animation
view_flipper.showNext();
return true;
} else if (e2.getY() - e1.getY() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityY) > SWIPE_THRESHOLD_VELOCITY) {
Log.i("screenshotsaver", "flig down");
view_flipper.setInAnimation(AnimationUtils.loadAnimation(context,
R.anim.in_from_top));
view_flipper.setOutAnimation(AnimationUtils.loadAnimation(context,
R.anim.out_to_bottom));
view_flipper.showPrevious();
return true;
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
}
class ViewHolder {
public ScreenObjectViewFlipper flip_view;
public TextView txt_view;
GestureDetector detector;
}
@Override
public View getView(int position, View convert_view, ViewGroup parent) {
ScreenObject screen_object = getItem(position);
LayoutInflater inflater = (LayoutInflater) MainActivity.application_context
.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
ViewHolder holder = null;
if (convert_view == null) {
convert_view = inflater.inflate(R.layout.flip_view, null);
holder = new ViewHolder();
holder.flip_view = (ScreenObjectViewFlipper) convert_view
.findViewById(R.id.view_flipper);
holder.txt_view = (TextView) convert_view.findViewById(R.id.title);
final GestureDetector detector = new GestureDetector(
MainActivity.application_context,
new SwipeGestureDetector(holder.flip_view));
holder.flip_view.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(final View view, final MotionEvent event) {
detector.onTouchEvent(event);
return true;
}
});
holder.detector = detector;
convert_view.setTag(holder);
} else
holder = (ViewHolder) convert_view.getTag();
holder.txt_view.setText(screen_object.footer_text);
holder.txt_view.setTag(screen_object.footer_url);
return convert_view;
}
}
公共类CustomListViewAdapter扩展了ArrayAdapter{
专用静态最终整数滑动最小距离=70;
专用静态最终整数滑动最大距离=50;
专用静态最终整数滑动\u阈值\u速度=120;
公共CustomListViewAdapter(上下文新建上下文,int资源id,
列表项,位图管理器(新建位图管理器){
超级(新上下文、资源id、项目);
位图\u管理器=新的\u位图\u管理器;
}
类SwipeGestureDetector扩展了SimpleOnGestureListener{
私有ScreenObjectViewFlipper视图\u flipper;
SwipeGestureDetector(ScreenObjectViewFlipper翻转视图){
视图\翻转器=翻转\视图;
}
@凌驾
公共布尔onFling(运动事件e1、运动事件e2、浮点速度X、,
浮动速度y){
Context Context=MainActivity.application\u Context;
试一试{
if(Math.abs(e1.getX()-e2.getX())>滑动最大距离)
返回false;
//上下滑动
如果(e1.getY()-e2.getY()>滑动最小距离
&&Math.abs(velocityY)>滑动阈值(速度){
Log.i(“屏幕截图保护程序”、“飞起来”);
view_flipper.setInAnimation(动画Utils.loadAnimation(上下文、,
R.anim.in_从_底部);
view_flipper.setOutAnimation(AnimationUtils.loadAnimation(上下文、,
R.anim.out_to_top);
//控制动画
view_flipper.showNext();
返回true;
}否则如果(e2.getY()-e1.getY()>滑动最小距离
&&Math.abs(velocityY)>滑动阈值(速度){
Log.i(“屏幕截图保护程序”、“向下飞行”);
view_flipper.setInAnimation(动画Utils.loadAnimation(上下文、,
R.anim.in_from_top);
view_flipper.setOutAnimation(AnimationUtils.loadAnimation(上下文、,
R.anim.out_to_bottom);
view_flipper.showPrevious();
返回true;
}
}捕获(例外e){
e、 printStackTrace();
}
返回false;
}
}
类视图持有者{
公共ScreenObjectViewFlipper翻转视图;
公共文本视图txt_视图;
手势检测器;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
ScreenObject screen\u object=getItem(位置);
LayoutFlater充气器=(LayoutFlater)MainActivity.application\u上下文
.getSystemService(活动.布局\充气机\服务);
ViewHolder=null;
if(convert_view==null){
convert_view=充气机。充气(R.layout.flip_view,null);
holder=新的ViewHolder();
holder.flip_view=(ScreenObjectViewFlipper)转换_视图
.findViewById(R.id.view\U flipper);
holder.txt_view=(TextView)convert_view.findViewById(R.id.title);
最终手势检测器=新手势检测器(
MainActivity.application\u上下文,
新的SwipeGestureDetector(支架翻转视图);
holder.flip_view.setOnTouchListener(新的OnTouchListener(){
@凌驾
公共布尔onTouch(最终视图、最终运动事件){
探测器。开孔(事件);
返回true;
}
});
holder.detector=检测器;
转换视图设置标签(支架);
}否则
holder=(ViewHolder)convert_view.getTag();
holder.txt\u view.setText(屏幕对象、页脚文本);
holder.txt\u view.setTag(屏幕对象、页脚url);
返回转换视图;
}
}
您是否有相同的XML布局和代码实现?是的。代码完全相同。此处使用的XML布局有语法错误。首先检查一下。嗨,乔尔,很抱歉回复晚了。我在旅行。我已经编辑了问题,以包含我正在使用的代码。你发现这里有什么不对劲吗?