Android 使用手势填充viewFlipper的速度较慢

Android 使用手势填充viewFlipper的速度较慢,android,Android,我有一个视图,我正在使用一个视图翻转器和一个手势来填充它。当我打开屏幕填充下一个视图时,显示下一个视图需要2到3秒钟。你知道会发生什么吗?这太慢了 以下是我的一些代码片段: private void updateView() { Log.i(DEBUG_TAG, "updateView"); // Preferences // boolean to track view on ...toggle method to pass boolean int

我有一个视图,我正在使用一个视图翻转器和一个手势来填充它。当我打开屏幕填充下一个视图时,显示下一个视图需要2到3秒钟。你知道会发生什么吗?这太慢了

以下是我的一些代码片段:

private void updateView() {
        Log.i(DEBUG_TAG, "updateView");
        // Preferences
        // boolean to track view on ...toggle method to pass boolean into and display appropriate

        mAdapter = new ForecastAdapter(mContext, R.layout.forecast_item, mWdm);
        mListView = (ListView) findViewById(R.id.forecast_list);

        mGestureDetector = new GestureDetector(new MyGestureDetector());
        mForecastDetails = (RelativeLayout) findViewById(R.id.detail_view);

        initIndicators();

        if (mListView.getVisibility() == View.VISIBLE) {
            displayForecastListView();
        } else {
            displayForecastDetailsView();
        }
    }
试着用它来实现它,看看它是否能带来不同。您是否在寻找用手指移动的视图?或者只是对一个轻击动作快速反应一两秒钟?如果前者没有本地构建的方法来实现这种效果,那么最好的办法就是查看家庭屏幕的源代码,并从中获取您需要的内容来创建您自己的自定义视图


编辑:如果您可以使findViewById()调用在populate方法之外进行,那么它可能会大大加快调用速度。尝试在创建时抓取这些引用,并将它们保留在周围。这样,您就可以只调用.setText()等,而不必进行查找,然后进行设置。我认为(但不是100%),只要使用setContentView()显示ViewFlipper的布局,就应该能够使用findViewById()获取ViewFlipper中任何内容的引用,即使当前显示的不是孩子。

您在什么设备上进行测试?我已经做了ViewSwiper用手势做的事情,以及没有做的事情。我相信我的缓慢存在于视图的所有变量以及进入逻辑的计算和调用中。我将把我的整个填充方法作为一个附录发布在上面。是的…已经尝试过了!在这样做之后,我发现我的findviewbyd在populate方法之外对性能没有任何影响。我感谢你的所有想法,如果你还有其他想法,我欢迎:)
private void displayForecastDetailsView() {

        mListView.setVisibility(View.GONE);
        mForecastDetails.setVisibility(View.VISIBLE);

        mMetric = mWdm.metric;
        // Set the touch listener for the main view to be our custom gesture listener
        //mainview.setOnTouchListener(new View.OnTouchListener() {
        this.setOnTouchListener(new View.OnTouchListener() {
            public boolean onTouch(View v, MotionEvent event) {
                if (mGestureDetector.onTouchEvent(event)) {
                    return true;
                }
                return false;
            }
        });

        mFlipper = (ExceptionCheckedViewFlipper) findViewById(R.id.details_flipper);
        mNext = (ImageButton) findViewById(R.id.next_btn);
        mNext.setImageBitmap(ACCUWX.applyFilter(
                mContext, BitmapFactory.decodeResource(
                        mContext.getApplicationContext().getResources(), R.drawable.right_arrow)));
        mPrevious = (ImageButton) findViewById(R.id.previous_btn);
        mPrevious.setImageBitmap(ACCUWX.applyFilter(
                mContext, BitmapFactory.decodeResource(
                        mContext.getApplicationContext().getResources(), R.drawable.left_arrow)));
        mNext.setOnClickListener(this);
        mPrevious.setOnClickListener(this);

        populateDetailView(mIndex);
    }
private void populateDetailView(int index) {

        mForecastDayIndicator.setForecastIndex(index);

        Log.i(DEBUG_TAG, "pouplateView");
        TextView tv;
        ImageView icon;
        ImageView alarmIcon;
        ImageView viewToggle;
        ForecastModel fm;
        boolean isEnabled = false;
        Boolean isAlarm = false;

        LinearLayout includes = (LinearLayout)mFlipper.getCurrentView();

        viewToggle = (ImageView)includes.findViewById(R.id.view_toggle);

        viewToggle.setOnClickListener(this);

        LinearLayout ll = (LinearLayout)includes.findViewById(R.id.detail_container);
        if(index >= 0 && index lessThan mWdm.forecast.size()) {
            fm = mWdm.forecast.get(index);

            // day/date
            tv = (TextView)includes.findViewById(R.id.day_date);
            tv.setText(fm.name + " " + fm.date);

            // hi temp
            tv = (TextView)includes.findViewById(R.id.hi_temp); 
            tv.setText(fm.high + DEG);

            // lo temp
            tv = (TextView)includes.findViewById(R.id.lo_temp); 
            tv.setText(fm.low + DEG);

            // realfeel hi lo
            tv = (TextView)includes.findViewById(R.id.realtemp);
            tv.setText(fm.reelfeelhigh + DEG + "/" + fm.reelfeellow + DEG);


            // day info
            tv = (TextView)includes.findViewById(R.id.day);
            tv.setText(mContext.getApplicationContext().getResources().getString(R.string.day).toUpperCase());

            // day icon
            icon = (ImageView)includes.findViewById(R.id.day_icon);
            icon.setImageResource(ACCUWX.getDrawableId("icon_" + fm.iconCode));

            // day shorttext
            tv = (TextView)includes.findViewById(R.id.day_shorttext); 
            tv.setText(fm.shortText);


            // night info
            tv = (TextView)includes.findViewById(R.id.night);
            tv.setText(mContext.getApplicationContext().getResources().getString(R.string.night).toUpperCase());

            // night icon
            icon = (ImageView)includes.findViewById(R.id.night_icon);
            icon.setImageResource(ACCUWX.getDrawableId("icon_" + fm.nightCode));

            // night shorttext
            tv = (TextView)includes.findViewById(R.id.night_shorttext); 
            tv.setText(fm.nightText);

            // headings
            // precip
            tv = (TextView)includes.findViewById(R.id.precip_title);
            tv.setText(mContext.getApplicationContext().getResources().getString(R.string.precip).toUpperCase());

            // day
            tv = (TextView)includes.findViewById(R.id.day_title);
            tv.setText(mContext.getApplicationContext().getResources().getString(R.string.day).toUpperCase());

            // night
            tv = (TextView)includes.findViewById(R.id.night_title);
            tv.setText(mContext.getApplicationContext().getResources().getString(R.string.night).toUpperCase());

            // wind
            tv = (TextView)includes.findViewById(R.id.wind_title);
            tv.setText(mContext.getApplicationContext().getResources().getString(R.string.wind).toUpperCase());


            // Precip fields
            String rainIceUnits = (mMetric == ACCUWX.Units.METRIC) ? mContext.getApplicationContext().getResources().getString(R.string.mm) : mContext.getApplicationContext().getResources().getString(R.string.inches);
            String snowUnits = (mMetric == ACCUWX.Units.METRIC) ? mContext.getApplicationContext().getResources().getString(R.string.cm) : mContext.getApplicationContext().getResources().getString(R.string.inches);
            String speedUnits = (mMetric == ACCUWX.Units.METRIC) ? mContext.getApplicationContext().getResources().getString(R.string.kph) : mContext.getApplicationContext().getResources().getString(R.string.mph);

            // set text color to white if measurements other than 0, else gray out

            // rain
            isAlarm = Alarms.checkRainAlarms(mWdm, fm);
            alarmIcon = (ImageView) includes.findViewById(R.id.rain_alarm_img); 
            if (isAlarm == true) alarmIcon.setVisibility(View.VISIBLE);
            else alarmIcon.setVisibility(View.INVISIBLE);

            isEnabled = !(checkForZero(fm.rain) && checkForZero(fm.nightRain));
            tv = (TextView)findViewById(R.id.rain);
            tv.setEnabled(isEnabled);

            isEnabled = !checkForZero(fm.rain);
            tv = (TextView)includes.findViewById(R.id.day_rain); 
            tv.setText(fm.rain + " " + rainIceUnits);
            tv.setEnabled(isEnabled);

            isEnabled = !checkForZero(fm.nightRain);
            tv = (TextView)includes.findViewById(R.id.night_rain); 
            tv.setText(fm.nightRain + " " + rainIceUnits);
            tv.setEnabled(isEnabled);

            // snow
            isAlarm = Alarms.checkSnowAlarms(mWdm, fm);
            alarmIcon = (ImageView) includes.findViewById(R.id.snow_alarm_img);
            if (isAlarm == true) alarmIcon.setVisibility(View.VISIBLE);
            else alarmIcon.setVisibility(View.INVISIBLE);

            isEnabled = !(checkForZero(fm.snow) && checkForZero(fm.nightSnow));
            tv = (TextView)findViewById(R.id.snow);
            tv.setEnabled(isEnabled);

            isEnabled = !checkForZero(fm.snow);
            tv = (TextView)includes.findViewById(R.id.day_snow); 
            tv.setText(fm.snow + " " + snowUnits);
            tv.setEnabled(isEnabled);

            isEnabled = !checkForZero(fm.nightSnow);
            tv = (TextView)includes.findViewById(R.id.night_snow); 
            tv.setText(fm.nightSnow + " " + snowUnits);
            tv.setEnabled(isEnabled);

            // ice
            isAlarm = Alarms.checkIceAlarms(mWdm, fm);
            alarmIcon = (ImageView) includes.findViewById(R.id.ice_alarm_img);
            if (isAlarm == true) alarmIcon.setVisibility(View.VISIBLE);
            else alarmIcon.setVisibility(View.INVISIBLE);

            isEnabled = !(checkForZero(fm.ice) && checkForZero(fm.nightIce));
            tv = (TextView)findViewById(R.id.ice);
            tv.setEnabled(isEnabled);

            isEnabled = !checkForZero(fm.ice);
            tv = (TextView)includes.findViewById(R.id.day_ice); 
            tv.setText(fm.ice + " " + rainIceUnits);
            tv.setEnabled(isEnabled);

            isEnabled = !checkForZero(fm.nightIce);
            tv = (TextView)includes.findViewById(R.id.night_ice); 
            tv.setText(fm.nightIce + " " + rainIceUnits);
            tv.setEnabled(isEnabled);

            // Wind Data
            isAlarm = Alarms.checkGustsAlarms(mWdm, fm);
            alarmIcon = (ImageView) includes.findViewById(R.id.gusts_alarm_img);
            if (isAlarm == true) alarmIcon.setVisibility(View.VISIBLE);
            else alarmIcon.setVisibility(View.INVISIBLE);

            isEnabled = !(checkForZero(fm.gust) && checkForZero(fm.nightGust));
            tv = (TextView)findViewById(R.id.gusts);
            tv.setEnabled(isEnabled);

            isEnabled = !checkForZero(fm.gust);
            tv = (TextView)includes.findViewById(R.id.day_gusts); 
            tv.setText(fm.gust + " " + speedUnits);
            tv.setEnabled(isEnabled);

            isEnabled = !checkForZero(fm.nightGust);
            tv = (TextView)includes.findViewById(R.id.night_gusts); 
            tv.setText(fm.nightGust + " " + speedUnits);
            tv.setEnabled(isEnabled);

            // speed
            isAlarm = Alarms.checkSpeedAlarms(mWdm, fm);
            alarmIcon = (ImageView) includes.findViewById(R.id.speed_alarm_img);
            if (isAlarm == true) alarmIcon.setVisibility(View.VISIBLE);
            else alarmIcon.setVisibility(View.INVISIBLE);

            isEnabled = !(checkForZero(fm.wind) && checkForZero(fm.nightWind));
            tv = (TextView)findViewById(R.id.speed);
            tv.setEnabled(isEnabled);

            isEnabled = !checkForZero(fm.wind);
            tv = (TextView)includes.findViewById(R.id.day_speed); 
            tv.setText(fm.wind + " " + speedUnits);
            tv.setEnabled(isEnabled);

            isEnabled = !checkForZero(fm.nightWind);
            tv = (TextView)includes.findViewById(R.id.night_speed); 
            tv.setText(fm.nightWind + " " + speedUnits);
            tv.setEnabled(isEnabled);

            // tstorms
            isAlarm = Alarms.checkTstormAlarms(mWdm, fm);
            alarmIcon = (ImageView) includes.findViewById(R.id.tstorms_alarm_img);
            if (isAlarm == true) alarmIcon.setVisibility(View.VISIBLE);
            else alarmIcon.setVisibility(View.INVISIBLE);

            isEnabled = !(checkForZero(fm.tstorm) && checkForZero(fm.nightTstorm));
            tv = (TextView)findViewById(R.id.tstorms);
            tv.setEnabled(isEnabled);

            isEnabled = !checkForZero(fm.tstorm);
            tv = (TextView)includes.findViewById(R.id.day_tstorms); 
            tv.setText(fm.tstorm + PERCENT);
            tv.setEnabled(isEnabled);

            isEnabled = !checkForZero(fm.nightTstorm);
            tv = (TextView)includes.findViewById(R.id.night_tstorms); 
            tv.setText(fm.nightTstorm + PERCENT);
            tv.setEnabled(isEnabled);
        }

    }