1

我有 10 个文本切换器,5 个用于销售量,5 个用于加仑量,如果达到 10,则根据最后一个文本切换器值增加其值。更新时我看到一些文本切换器闪烁,有时它们刚刚从视图中消失。

它更有可能始终显示在循环中遍历 100 次的价格。我设置了最后一个 textswitcher 的动画时间,将其值从 0 增加到 10,如果达到 10,则它恢复为 0,并且下一个 textswitcher 值增加并且依此类推。最后一个文本切换的动画时间是 50 毫秒。我需要在 5 秒内完成这个动画。任何帮助将不胜感激?(谢谢)这是我的课-:

Myclass.java

        private void createUi() {
                setContentView(R.layout.layout_sale_complete);
                linearLayout = (LinearLayout) findViewById(R.id.receiptLLActivity);
                TextView title = (TextView) findViewById(R.id.screenTitle);
                title.setText(getString(R.string.sale_complete));
                seePointEarned = (Button)findViewById(R.id.pointsEarnedButton);


                int[] saleTV = { R.id.sa1, R.id.sa2, R.id.sa3, R.id.sa4, R.id.sa5 };
                Animation out_gallon = AnimationUtils.loadAnimation(this,
                        R.anim.slide_up_from_center);
                Animation in_gallon = AnimationUtils.loadAnimation(this,
                        R.anim.slide_up_from_bottom);
                Animation out = AnimationUtils.loadAnimation(this,
                        R.anim.slide_up_from_center);
                Animation in = AnimationUtils.loadAnimation(this,
                        R.anim.slide_up_from_bottom);
                Animation down = AnimationUtils.loadAnimation(this,
                        R.anim.slide_down_receipt);
                Animation inSlow = AnimationUtils.loadAnimation(this,
                        R.anim.slide_up_from_bottom_slow);
                Animation outSlow = AnimationUtils.loadAnimation(this,
                        R.anim.slide_up_from_center_slow);
                for (int i = 0; i < saleTV.length; i++) {
                    sale[i] = (TextSwitcher) findViewById(saleTV[i]);

                    sale[i].setFactory(this);

                    saleCounter[i] = Integer.parseInt(saleDigits[i]);
                }


                for (int i = 0; i < gallonCounter.length; i++) {
                    if (i == 4) {
                        gallon[i].setInAnimation(in_gallon);
                        gallon[i].setOutAnimation(out_gallon);
                        sale[i].setInAnimation(in);
                        sale[i].setOutAnimation(out);
                    } else {
                        gallon[i].setInAnimation(inSlow);
                        gallon[i].setOutAnimation(outSlow);
                        sale[i].setInAnimation(inSlow);
                        sale[i].setOutAnimation(outSlow);
                    }

                }


                new AsyncTask<Void, String, String>() {

                    @Override
                    protected String doInBackground(Void... params) {
                        if (finalValueSale == 0) {
                            Log.i("do in back final value null ", "0");
                            return null;
                        }

                        do {

                            if (saleStopFlag == false
                                    && buildFinalValue("sale") >= finalValueSale) {

                                saleStopFlag = true;

                            }
                            if (gallonStopflag == false
                                    && buildFinalValue("gallon") >= finalValueGallon) {

                                gallonStopflag = true;
                            }
                            if (saleStopFlag == true && gallonStopflag == true) {
                                break;
                            }


                            try {
                                runOnUiThread(new Runnable() {

                                    @Override
                                    public void run() {
                                        if (saleStopFlag == false) {
                                            if (++saleCounter[4] == 10) {
                                                saleCounter[4] = 0;
                                                if (++saleCounter[3] == 10) {
                                                    saleCounter[3] = 0;
                                                    if (++saleCounter[2] == 10) {
                                                        saleCounter[2] = 0;
                                                        if (++saleCounter[1] == 10) {
                                                            saleCounter[1] = 0;
                                                            sale[0].setText(String
                                                                    .valueOf(++saleCounter[0]));
                                                        }

                                                        sale[1].setText(String
                                                                .valueOf(saleCounter[1]));
                                                    }

                                                    sale[2].setText(String
                                                            .valueOf(saleCounter[2]));

                                                }

                                                sale[3].setText(String
                                                        .valueOf(saleCounter[3]));
                                            }

                                            sale[4].setText(String.valueOf(saleCounter[4]));
                                        }

                                        if (gallonStopflag == false) {
                                            if (++gallonCounter[4] == 10) {
                                                gallonCounter[4] = 0;
                                                if (++gallonCounter[3] == 10) {
                                                    gallonCounter[3] = 0;
                                                    if (++gallonCounter[2] == 10) {
                                                        gallonCounter[2] = 0;
                                                        if (++gallonCounter[1] == 10) {
                                                            gallonCounter[1] = 0;
                                                            gallon[0]
                                                                    .setText(String
                                                                            .valueOf(++gallonCounter[0]));
                                                        }
                                                        gallon[1].setText(String
                                                                .valueOf(gallonCounter[1]));
                                                    }
                                                    gallon[2].setText(String
                                                            .valueOf(gallonCounter[2]));
                                                    Log.i("gallon2", String
                                                            .valueOf(gallonCounter[2]));
                                                }
                                                gallon[3].setText(String
                                                        .valueOf(gallonCounter[3]));
                                            }
                                            gallon[4].setText(String
                                                    .valueOf(gallonCounter[4]));
                                        }
                                    }

                                });

                                try {

                                    Thread.sleep(50);
                                } catch (InterruptedException e) {
                                    e.printStackTrace();
                                }
                            } catch (NullPointerException e) {
                                Logger.e(TAG, "Null pointer exception", e);
                                Thread.currentThread().interrupt();
                                break;
                            }


                        } while (true);

                        if(buildFinalValue("gallon") > finalValueGallon) {

                            runOnUiThread(new Runnable() {

                                @Override
                                public void run() {
                                    gallon[0].setText(gallonDigits[0]);
                                    gallon[1].setText(gallonDigits[1]);
                                    gallon[2].setText(gallonDigits[2]);
                                    gallon[3].setText(gallonDigits[3]);
                                    gallon[4].setText(gallonDigits[4]);
                                }
                            });
                        }
                        if(buildFinalValue("sale") > finalValueSale) {

                            runOnUiThread(new Runnable() {

                                @Override
                                public void run() {
                                    sale[0].setText(saleDigits[0]);
                                    sale[1].setText(saleDigits[1]);
                                    sale[2].setText(saleDigits[2]);
                                    sale[3].setText(saleDigits[3]);
                                    sale[4].setText(saleDigits[4]);
                                }
                            });
                        }
                        return null;
                    }

                }.execute();
        }

    public View makeView() {
            TextView t = new DinProMediumTextView(this);
            t.setTextColor(getResources().getColor(R.color.white));
            Shader shader = new RadialGradient(Utility.convertDpToPixel(15,
                    getResources().getDisplayMetrics().densityDpi),
                    Utility.convertDpToPixel(30,
                            getResources().getDisplayMetrics().densityDpi),
                    Utility.convertDpToPixel(12,
                            getResources().getDisplayMetrics().densityDpi),
                    getResources().getColor(R.color.full_white), getResources()
                            .getColor(R.color.grey), TileMode.CLAMP);

            t.getPaint().setShader(shader);
            t.setTextSize(43);

            return t;
        }

这是动画xml文件-:

slide_up_from_center.xml =

<?xml version="1.0" encoding="utf-8"?>

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromYDelta="0%p" android:toYDelta="-100%p"
            android:duration="50" android:interpolator="@android:anim/linear_interpolator"  />
    <alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="50" android:interpolator="@android:anim/linear_interpolator" />
</set>

slide_up_from_bottom.xml =

<?xml version="1.0" encoding="utf-8"?>

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromYDelta="100%p" android:toYDelta="0%p"
            android:duration="50" android:interpolator="@android:anim/linear_interpolator"  />
    <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="50" android:interpolator="@android:anim/linear_interpolator" />

</set>


slide_up_from_bottom_slow.xml =

<?xml version="1.0" encoding="utf-8"?>

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromYDelta="100%p" android:toYDelta="0%p"
            android:duration="120" android:interpolator="@android:anim/linear_interpolator"  />
    <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="120" android:interpolator="@android:anim/linear_interpolator" />
</set>

slide_up_from_center_slow.xml =

<?xml version="1.0" encoding="utf-8"?>

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromYDelta="0%p" android:toYDelta="-100%p"
            android:duration="120" android:interpolator="@android:anim/linear_interpolator"  />
    <alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="120" android:interpolator="@android:anim/linear_interpolator" />
</set>

我不知道这有什么问题。

4

0 回答 0