0
  • Ich habe zwei Bilder, in einem einzigen Viewpager Artikel. Wenn ich auf ein Bild klicke, wird eine einfache Linie angezeigt.
  • Ich wachse diese Linie Faden, Linie ist Prozentsatz der Abstimmung, die zu bestimmtem Bild gegeben ist, basierend auf dem prozentualen Linie auf beiden Bild nach dem Klick gezogen
  • Aber Problem, dass, wenn ich einzelne Zeile auf einem Bild klicken wird an diesem Bild gezeichnet, und alle anderen viewpager Artikel wird keine Linie auf KlickThread in jedem Viewpager Element ausführen

  • ich möchte zwei Zeilen nach Klick auf ein Bild, so gezeichnet, was

ivImageOne.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(final View v) { 

     id = arraylist.get(position).get("user_id1"); 

     feed_id = arraylist.get(position).get("feed_id"); 
     Log.e("feeeeeee", feed_id); 

     View tempView = (View) v.getTag(R.integer.btnminusview); 
     Integer pos = (Integer) v.getTag(R.integer.btnminuspos); 
     ivRightTick = (ImageView) tempView.findViewById(R.id.ivRightTick); 

     ivLeftTick = (ImageView) tempView.findViewById(R.id.ivLeftTick); 

     ivLeftTick.setVisibility(View.GONE); 
     ivRightTick.setVisibility(View.VISIBLE); 
     vOne = (View) tempView.findViewById(R.id.vOne); 
     vTwo = (View) tempView.findViewById(R.id.vTwo); 

     mThread = new Thread() { 
      @Override 
      public void run() { 

       while (pStatus < pcount1) { 
        pStatus += 10; 

        handler.post(new Runnable() { 

         @Override 
         public void run() { 

          android.view.ViewGroup.LayoutParams params = vOne.getLayoutParams(); 
          params.height = pStatus; 
          params.width = 10; 
          Log.d("pppppppppppppp", params.height + ""); 
          vOne.setLayoutParams(params); 

          // vOne.setLayoutParams(new WindowManager.LayoutParams(1,pStatus)); 
          if (pStatus == pcount1) { 
           stopThread(mThread); 
          } 
         } 
        }); 
        try { 
         Thread.sleep(19); //thread will take approx 2.5 seconds to finish 
        } catch (InterruptedException e) { 
         e.printStackTrace(); 
        } 
       } 

      } 
     }; 


     mThread2 = new Thread() { 
      @Override 
      public void run() { 

       while (pStatus2 > MIN_VALUE) { 
        pStatus2 += 10; 

        handler2.post(new Runnable() { 

         @Override 
         public void run() { 

          android.view.ViewGroup.LayoutParams params = vTwo.getLayoutParams(); 
          params.height = pStatus; 
          params.width = 10; 
          Log.d("pppppppppppppp", params.height + ""); 
          vTwo.setLayoutParams(params); 
          // vOne.setLayoutParams(new WindowManager.LayoutParams(1,pStatus)); 
          if (pStatus2 == pcount2) { 
           stopThread(mThread2); 
          } 

         } 
        }); 
        try { 
         Thread.sleep(19); //thread will take approx 2.5 seconds to finish 
        } catch (InterruptedException e) { 
         e.printStackTrace(); 
        } 
       } 

      } 
     }; 

     mThread.start(); 
     mThread2.start(); 
    } 
}); 


ivFeedImageTwo.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 

     // giveVote(2); 

     id = arraylist.get(position).get("user_id2"); 
     feed_id = arraylist.get(position).get("feed_id"); 

     View tempView = (View) v.getTag(R.integer.btnminusview); 
     Integer pos = (Integer) v.getTag(R.integer.btnminuspos); 
     ivLeftTick = (ImageView) tempView.findViewById(R.id.ivLeftTick); 
     ivRightTick = (ImageView) tempView.findViewById(R.id.ivRightTick); 
     ivLeftTick.setVisibility(View.VISIBLE); 
     ivRightTick.setVisibility(View.GONE); 
     vOne = (View) tempView.findViewById(R.id.vOne); 
     vTwo = (View) tempView.findViewById(R.id.vTwo); 

     mThread = new Thread() { 
      @Override 
      public void run() { 

       while (pStatus < pcount2) { 
        pStatus += 10; 

        handler.post(new Runnable() { 

         @Override 
         public void run() { 

          android.view.ViewGroup.LayoutParams params = vTwo.getLayoutParams(); 
          params.height = pStatus; 
          params.width = 10; 
          Log.d("pppppppppppppp", params.height + ""); 
          vTwo.setLayoutParams(params); 
          // vOne.setLayoutParams(new WindowManager.LayoutParams(1,pStatus)); 
          if (pStatus == pcount2) { 
           stopThread(mThread); 
          } 

         } 
        }); 
        try { 

         Thread.sleep(19); //thread will take approx 2.5 seconds to finish 
        } catch (InterruptedException e) { 
         e.printStackTrace(); 
        } 
       } 


      } 
     }; 

     mThread2 = new Thread() { 
      @Override 
      public void run() { 

       while (pStatus2 > MIN_VALUE) { 
        pStatus2 += 10; 

        handler2.post(new Runnable() { 

         @Override 
         public void run() { 
          android.view.ViewGroup.LayoutParams params = vOne.getLayoutParams(); 
          params.height = pStatus; 
          params.width = 10; 
          Log.d("pppppppppppppp", params.height + ""); 
          vOne.setLayoutParams(params); 
          // vOne.setLayoutParams(new WindowManager.LayoutParams(1,pStatus)); 
          if (pStatus2 == pcount1) { 
           stopThread(mThread2); 
          } 
         } 
        }); 

        try { 
         Thread.sleep(19); //thread will take approx 2.5 seconds to finish 
        } catch (InterruptedException e) { 
         e.printStackTrace(); 
        } 
       } 

      } 
     }; 

     mThread2.start(); 
     mThread.start(); 
    } 
}); 

Antwort

0

hier zu tun ist Wie Sie mit Ihrem unmittelbaren Problem umgehen:

Codieren Sie eine Methode für Ihre Aktivität/Fragment, die die Animation für die beiden Zeilen startet. Richten Sie dann zwei identische OnClickListener s ein, eine auf jedem Bild, die einfach die Animationsmethode aufrufen.

Was mir mehr Sorgen macht ist Ihre Verwendung von Thread s für die Animation. Das ist nicht der Android-Weg. Sie sollten einen Animator verwenden, um die visuelle Änderung Ihrer Ansicht vorzunehmen. Der Code könnte so einfach sein wie:

 float pct = ... // ratio of votes to total votes, from 0.0 to 1.0 

     vOne.setScaleX(0F); 
     vOne.animate().setDuration(150).scaleXBy(pct).start(); 

auf einige der Animation Tutorials auf der Website schauen Sie bitte Android Developers und anderswo auf dem Netz.