例如,必须绘制图像布局。

我将ImageView膨胀为布局。当我在屏幕上滑动时,我需要将每个圆圈的颜色更改为绿色。我应该怎么做。我尝试使用手势检测器,但无法获得所需的东西。



这是我的代码。我通过放大图像视图来创建此视图。

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().addFlags(1024);
        setContentView(R.layout.test);
        DisplayMetrics displaymetrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
        height = displaymetrics.heightPixels;
        width = displaymetrics.widthPixels;
        count = width/30;
        totalCircles = count * (height/30);
        horizontalSpace = width%30;
        verticalSpace = height%30;
        mRelativeLayout = (RelativeLayout)findViewById(R.id.fl);
        mRelativeLayout.setPadding(horizontalSpace/2, verticalSpace/2, horizontalSpace/2, verticalSpace/2);
        for(int i=1;i<totalCircles+1;i++){
             myButton = new ImageView(this);
             myButton.setId(i);
             myButton.setImageResource(R.drawable.circle_grey);
             LayoutParams lp = new LayoutParams(0,0);
             if(i%count != 1){
                 lp.addRule(RelativeLayout.RIGHT_OF, imgViews.get(i-2).getId());
                 if(imView != null){
                     lp.addRule(RelativeLayout.BELOW, imView.getId());
                 }
                 if(i%count == 0){
                     imView = myButton;
                 }
             }else{
                 if(imView != null){
                     lp.addRule(RelativeLayout.BELOW, imView.getId());
                 }
             }

             mRelativeLayout.addView(myButton,lp);
             myButton.getLayoutParams().width = 30;
             myButton.getLayoutParams().height = 30;
             imgViews.add(myButton);
             myButton.setOnTouchListener(new OnTouchListener() {

                @Override
                public boolean onTouch(View v, MotionEvent event) {
                     if(event.getAction() == MotionEvent.ACTION_DOWN){
                         System.out.println("Inside touch listener");
                            ImageView imV = (ImageView)v;
                            imV.setImageResource(R.drawable.circle_green);
                     }

                    return false;
                }
            });

        }
    }

最佳答案

Jack K Fouani的回答部分正确。代替imagView.onTouch,您需要使用gridview.onTouch
请检查此样本。

gv.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            float currentXPosition = event.getX();
            float currentYPosition = event.getY();
            int position = gv.pointToPosition((int)currentXPosition, (int) currentYPosition);
            //using the position obtained you can change the imageview color.
            }

            return true;
        }
    });

07-28 01:08
查看更多