0

I have been searching an a solution for this problem but couldn't find one. My app contains a Scroll view with text views in it.I want to make an animation in such a way that when scrolled, a text view which gets scrolled to the center must be highlighted and gradually return back to original state when scrolled away from the center. I do not know how to get it working. I tried many different approaches but failed. Please help me. Thank you.

 public class FifthActivity extends AppCompatActivity {
    private Toolbar toolbar;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fifth);
        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        final  ScrollView sv = (ScrollView)findViewById(R.id.scroll);
        LinearLayout l1 = (LinearLayout)findViewById(R.id.linear_layout);
        final TextView tv1 = (TextView)findViewById(R.id.nernst_eqation);
        final TextView tv2 = (TextView)findViewById(R.id.hardnessofwater);
        final TextView tv3 = (TextView)findViewById(R.id.Cao_in_cement_sample);
        final TextView tv4 = (TextView)findViewById(R.id.COD);
        final TextView tv5 = (TextView)findViewById(R.id.copper_in_brass);
        final TextView tv6 = (TextView)findViewById(R.id.alkalinity);
        final TextView tv7 = (TextView)findViewById(R.id.Iron);
        final TextView tv8 = (TextView)findViewById(R.id.cu_colourimetry);
        final TextView tv9 = (TextView)findViewById(R.id.potentiometry);
        final TextView tv10 = (TextView)findViewById(R.id.conductometry);
        final TextView tv11 = (TextView)findViewById(R.id.pka);
        final TextView tv12 = (TextView)findViewById(R.id.flame);
        final TextView tv13 = (TextView)findViewById(R.id.Viscosity);

        int sWidth= this.getResources().getDisplayMetrics().widthPixels;
        int sHeight= this.getResources().getDisplayMetrics().heightPixels;
        final int CenterX=sWidth/2;
        final int CenterY = sHeight/2;

        sv.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
            @Override
            public void onScrollChanged() {
                if ((tv1.getTop() + tv1.getHeight() / 2) == CenterY && (tv1.getLeft()+ tv1.getWidth()/2) == CenterX) {
                    tv1.setBackgroundResource(border);
                }

                else if ((tv2.getTop() + tv2.getHeight() / 2) == CenterY && (tv2.getLeft()+tv2.getWidth()/2) == CenterX) {
                    tv2.setBackgroundResource(border);
                }
                else if ((tv3.getTop() + tv3.getHeight() / 2) == CenterY && (tv3.getLeft()+tv3.getWidth()/2 ) == CenterX) {
                    tv3.setBackgroundResource(border);
                }
                else if ((tv4.getTop() + tv4.getHeight() / 2) == CenterY && (tv4.getLeft()+tv4.getWidth()/2) == CenterX) {
                    tv4.setBackgroundResource(border);
                }
                else if ((tv5.getTop() + tv5.getHeight() / 2) == CenterY && (tv5.getLeft()+tv5.getWidth()/2) == CenterX) {
                    tv5.setBackgroundResource(border);
                }
                else if ((tv6.getTop() + tv6.getHeight() / 2) == CenterY && (tv6.getLeft()+tv6.getWidth()/2) == CenterX)  {
                    tv6.setBackgroundResource(border);
                }
                else if ((tv7.getTop() + tv7.getHeight() / 2) == CenterY && (tv7.getLeft()+tv7.getWidth()/2) == CenterX) {
                    tv7.setBackgroundResource(border);
                }
                else if ((tv8.getTop() + tv8.getHeight() / 2) == CenterY && (tv8.getLeft()+tv8.getWidth()/2) == CenterX) {
                    tv8.setBackgroundResource(border);
                }
                else if ((tv9.getTop() + tv9.getHeight() / 2) == CenterY && (tv9.getLeft()+tv9.getWidth()/2) == CenterX ){
                    tv9.setBackgroundResource(border);
                }
                else if ((tv10.getTop() + tv10.getHeight() / 2) == CenterY && (tv10.getLeft()+tv10.getWidth()/2) == CenterX) {
                    tv10.setBackgroundResource(border);
                }
                else if ((tv11.getTop() + tv11.getHeight() / 2) == CenterY && (tv11.getLeft()+tv11.getWidth()/2) == CenterX) {
                    tv11.setBackgroundResource(border);
                }
                else if ((tv12.getTop() + tv12.getHeight() / 2) == CenterY && (tv12.getLeft()+tv12.getWidth()/2) == CenterX) {
                    tv12.setBackgroundResource(border);
                }
                else if ((tv13.getTop() + tv13.getHeight() / 2) == CenterY && (tv13.getLeft()+tv13.getWidth()/2) == CenterX) {
                    tv13.setBackgroundResource(border);
                }
            }
        });

    }
Chinmaya KN
  • 29
  • 1
  • 9
  • 1
    If you just want to highlight you could change the color of the text, check this [link](http://stackoverflow.com/a/29515539/6799753) for reference – kaido Feb 10 '17 at 15:17
  • 1
    you can try a scroll listener http://stackoverflow.com/questions/10713312/can-i-have-onscrolllistener-for-a-scrollview -- and then get the co ordinates of the textview http://stackoverflow.com/questions/4841391/finding-the-view-location-position-on-display-screen-in-android -- you will also need to get the center of the screen so you know the center http://stackoverflow.com/questions/18304460/how-to-get-the-center-coordinates-of-the-screen-in-android -- i guess then its a case of ( if textview.coordinates == center do the animation work) but you will have a lot of IFs as many textviews. – Tasos Feb 10 '17 at 15:26
  • @Tasos I approached your idea but it doesn't seem to be working. I have edited my question by adding the code snippets. Is my code correct? Please review it. – Chinmaya KN Feb 12 '17 at 10:29

0 Answers0