【问题标题】:Execute Thread in every Viewpager item在每个 Viewpager 项目中执行线程
【发布时间】:2016-07-28 09:26:49
【问题描述】:
  • 我有两张图片,在单个浏览器项目中。当我点击任何图像时,它会显示一条线,简单的线。
  • 我正在使用线程来增加这条线,线是给予特定图像的投票百分比,基于点击后在两个图像上绘制的百分比线
  • 1234563
  • 点击任意图片后想要两行,怎么办

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();
    }
});

【问题讨论】:

    标签: android multithreading android-layout android-viewpager


    【解决方案1】:

    以下是您处理当前问题的方法:

    在您的活动/片段上编写一个方法来启动两行的动画。然后设置两个相同的OnClickListeners,每张图片一个,调用动画方法。

    我更关心的是你在动画中使用Threads。这不是安卓的方式。您应该使用动画师对视图进行视觉更改。代码可以很简单:

            float pct = ... // ratio of votes to total votes, from 0.0 to 1.0
    
            vOne.setScaleX(0F);
            vOne.animate().setDuration(150).scaleXBy(pct).start();
    

    请查看 Android 开发者网站和网络上其他地方的一些动画教程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多