0

私のアプリでは、6 つのアヒルの画像の水平スクロールビューがありますが、水平スクロールビューは適切に機能しますが、シークバーを移動すると水平スクロールビューが適切な項目に配置されるように、水平スクロールビューの下に SeekBar を追加したいと考えています。

私は次のようにコードを書きました:

シークバー:

    seekBar1.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() 
    {           
        @Override
        public void onStopTrackingTouch(SeekBar seekBar) 
        {
            // TODO Auto-generated method stub              
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) 
        {
            // TODO Auto-generated method stub          
        }

        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) 
        {
            seekBar.setProgress(progress);

            if (progress ==5)  {mLinearLayout.scrollTo(R.drawable.d_duck400_5, 0);}
            if (progress ==4)  {mLinearLayout.scrollTo(R.drawable.d_duck400_4, 0);}
            if (progress ==3)  {mLinearLayout.scrollTo(R.drawable.d_duck400_3, 0);}
            if (progress ==2)  {mLinearLayout.scrollTo(R.drawable.d_duck400_2, 0);}
            if (progress ==1)  {mLinearLayout.scrollTo(R.drawable.d_duck400_1, 0);}
            if (progress ==0)  {mLinearLayout.scrollTo(R.drawable.d_duck400_0, 0);}
        }
    });         
}

水平スクロールビュー:

    private void getDeviceWidth() 
    {  
        DisplayMetrics dm = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(dm);  
        mWidth = dm.widthPixels;  
    }  

    private void initView() 
    {  
        int[] imageArray = { R.drawable.d_duck400_0, R.drawable.d_duck400_1, R.drawable.d_duck400_2, 
                R.drawable.d_duck400_3, R.drawable.d_duck400_4, R.drawable.d_duck400_5};

//        int[] imageArray = { R.drawable.d_duck1_400, R.drawable.d_duck1_400, R.drawable.d_duck1_400, 
//              R.drawable.d_duck1_400, R.drawable.d_duck1_400, R.drawable.d_duck1_400};

        mLinearLayout = (LinearLayout) findViewById(R.id.scrollview_layout);
        mLinearLayout.removeAllViews();
        for (int i = 0; i < 6; i++) 
        {// Place 6 items into horizontalscrollview
            int width = mWidth /1;  
            LinearLayout itemLayout = (LinearLayout) LinearLayout.inflate(Duck.this, R.layout.d_scrollview_item, null);
            itemLayout.setLayoutParams(new LayoutParams(width,  LayoutParams.MATCH_PARENT));// set the width as 1 screen showing 3 items  
            itemLayout.setGravity(Gravity.CENTER_VERTICAL);

            ImageView mImageView = (ImageView) itemLayout.findViewById(R.id.imageview);  
            TextView mTextView = (TextView) itemLayout.findViewById(R.id.textview);  

            final String page = "The" + (i + 1) + "th page";  

            mTextView.setText(page);  
            mImageView.setBackgroundResource(imageArray[i]);  

            mLinearLayout.addView(itemLayout);  

            itemLayout.setOnTouchListener(new OnTouchListener() 
            {  
                public boolean onTouch(View v, MotionEvent event) 
                {  
//                    Toast.makeText(Duck.this, "Click" + page, Toast.LENGTH_SHORT).show();  
                    return false;  
                }
            });  
        } 
    }

質問:

シークバーを移動すると、水平スクロール ビューの画像がすべて消えてしまいます。

何が起こっている?アドバイスありがとうございます!

4

1 に答える 1

0
if (progress ==5)  {mLinearLayout.scrollTo(R.drawable.d_duck400_5, 0);

scrollTox、y座標が新しい位置にスクロールすることを期待しています。しかし、あなたはそれR.drawable.d_duck400_5をx値として与えます。これは、コンパイラによって生成された単なるランダムな整数になります。スクロールしたいx座標ではありません。

次のようなことを試してください:

if (progress ==5)  {mLinearLayout.scrollTo(200, 0);
if (progress ==5)  {mLinearLayout.scrollTo(400, 0);
....

ビューの位置を見つけたい場合は、getLocationInWindowまたはgetLocationOnScreenメソッドを使用できます。

int[] location = new int[2];
yourView.getLocationOnScreen(location);
int x = location[0];
int y = location[1];
于 2013-11-11T07:48:45.477 に答える