ranjith
ranjith

Reputation: 4536

how can we change image view background on swipe?

As a example,have to draw a layout of images.

I inflated an ImageView into a layout. When I swipe on the screen I need to change the color of the each circle to green. How should I do it. I tried with gesture detector, but I can't get what I need.

screen shot

and this is my code.. I create this view by inflating an image view..

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

        }
    }

Upvotes: 2

Views: 1728

Answers (3)

Mahesh
Mahesh

Reputation: 984

Jack K Fouani's answer is partially correct. Instead of imagView.onTouch you need to use gridview.onTouch. Please check this sample.

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

Upvotes: 2

Noob
Noob

Reputation: 2927

my advice is to use GrideView with adapter , inside the adapter you will have position for each imagView the position allow you to check if image is touched or not depending on that you can change ImageView color to white or green

Upvotes: 0

Tim Kranen
Tim Kranen

Reputation: 4222

Instead of inflating one ImageView. You should fill a GridView where every GridCell contains a circle image. Now set the OnTouchEvent of those Gridcells to change the ImageView within the GridCell.

Upvotes: 0

Related Questions