1

我有一个列表,它捕获了移动的手指,你可以通过滑动手指来删除一个项目

如果图像没有加载到我的容器中,使用 ImageView.setImage(),容器会正确移动。

但是,如果我加载了一张图像,则容器移动得更慢。

为什么会这样?

下面附上图片。

1.正确移动

在此处输入图像描述

  1. 不正确移动 在此处输入图像描述 总是将容器从左向右移动

为什么?谢谢。

更新 19/01/2014 我将位图减少到 150 kb 并继续相等。

留下我的代码

    objelementos.lnyDatosCliente.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, final MotionEvent event) {



         final  CCliente objcCCliente = lstLista.get(objelementos.posicion);
        CAnimaciones objAnmanim = new CAnimaciones();
        Display pantalla =  afrmGstionClientes.getActivity().getWindowManager().getDefaultDisplay();
        final int ancho = pantalla.getWidth();



        switch ( event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                fdYPrimeroPulsado = event.getRawY();
                fdXPulsadoInicio = event.getRawX();
                fdXUltimaPulsado = event.getRawX();
                iTamanioLnyPulsado =0;

            break;
            case MotionEvent.ACTION_MOVE:


                        float fdXPulsado = event.getRawX();
                        float fdXMovimiento = fdXPulsado- fdXUltimaPulsado;
                        objelementos.lnyDatosCliente.setVisibility(4);
                        objelementos.lnyDatosClienteToMove.setVisibility(0);
                        objelementos.lnyDatosClienteToMove.setX(fdXMovimiento);
                        iTamanioLnyPulsado =1;



                break;

            case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL:

                float fdXPulsad = event.getRawX();
                float xmov =fdXPulsad- fdXUltimaPulsado;
                fdYUltimoPulsado = event.getRawY();


                        int difx = (int)fdXPulsad- (int)fdXPulsadoInicio;

                        if (difx>120){ 
                            ObjectAnimator animaciion = objAnmanim.CrearAnimacion(objelementos.lnyDatosClienteToMove, xmov, ancho+10, "x", 85);//(xFin-20, ancho+10, 200) ;
                            animaciion.start();


                            new Handler().postDelayed(new Runnable() {
                                public void run() {
                                float num = objcCCliente.getposicionXInicio();

                               AlertDialog.Builder builder = new AlertDialog.Builder(
                                        getContext());
                                builder.setIcon(R.drawable.ic_launcher);
                                builder.setTitle("!AVISO!");
                                builder.setMessage("¿Estas seguro de eliminar el cliente?")
                                        .setPositiveButton("Si", new DialogInterface.OnClickListener() {
                                            public void onClick(DialogInterface dialog, int id) {
                                            CustomAdapterListadoClientes.this.lstLista.remove(objelementos.posicion);
                                            CustomAdapterListadoClientes.this.notifyDataSetChanged();
                                            dialog.dismiss();
                                          }
                                        })
                                        .setNegativeButton("No", new DialogInterface.OnClickListener() {
                                            public void onClick(DialogInterface dialog, int id) {
                                            vol(ancho-10, objelementos.lnyDatosCliente.getX(), objelementos.lnyDatosClienteToMove, 180, objelementos.lnyDatosCliente);
                                            dialog.dismiss();
                                            }
                                        });
                                AlertDialog dialog = builder.create();
                                dialog.show();
                                }
                            }, animaciion.getDuration());


                        }else{




                            if (iTamanioLnyPulsado==0){
                                float dify = fdYPrimeroPulsado -fdYUltimoPulsado;
                                if (dify<0){
                                    dify*=-1;
                                }

                                if (dify<10){
                                float fddondeesta = objelementos.lnyDatosCliente.getY();
                                ObjectAnimator animaciion = objAnmanim.CrearAnimacion(objelementos.lnyDatosCliente, fddondeesta-1, fddondeesta, "x",50);

                                animaciion.start();
                                Cnavegar objNavegar = new Cnavegar();
                                AfrmHigthModificationCliente afrmModificacion = new AfrmHigthModificationCliente(true, objcCCliente,afrmGstionClientes);
                                objNavegar.RemplazarFragmento(R.id.rtlAltas, afrmModificacion, "AfrmHigthModificationCliente", afrmGstionClientes.getActivity().getSupportFragmentManager());
                                }
                            }else{

                                 if (difx>0){
                                     vol(xmov, objelementos.lnyDatosCliente.getX(), objelementos.lnyDatosClienteToMove, 180, objelementos.lnyDatosCliente);
                                 }else{
                                     vol(xmov, objelementos.lnyDatosCliente.getX(), objelementos.lnyDatosClienteToMove, 180, objelementos.lnyDatosCliente);
                                 }


                            }


                        }


                break;
            }


                return true;
        }
    });
4

2 回答 2

0

你在使用ViewHolder模式吗?您是否将图像加载到另一个线程上?

对于加载图像,我使用Picasso库。

于 2014-01-16T14:15:12.210 回答
0

解决我的慢问题,它不在于图像的大小我使用两个线性布局更改与此适配器关联的可见性以将其更改为可见或不可见。他的适配器不得不再次重写代码,这是因为我的问题。现在只适用于线性布局不变的可见性,位置,只有我的应用程序我运行到完美

谢谢大家的帮助

于 2014-02-04T08:57:54.047 回答