HandleView.java revision 81393d6dc5767f7784a00958095614a37bf1a91a
1ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi/*
2ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Copyright (C) 2010 The Android Open Source Project
3ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi *
4ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Licensed under the Apache License, Version 2.0 (the "License");
5ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * you may not use this file except in compliance with the License.
6ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * You may obtain a copy of the License at
7ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi *
8ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi *      http://www.apache.org/licenses/LICENSE-2.0
9ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi *
10ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Unless required by applicable law or agreed to in writing, software
11ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * distributed under the License is distributed on an "AS IS" BASIS,
12ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * See the License for the specific language governing permissions and
14ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * limitations under the License.
15ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */
16ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
1781393d6dc5767f7784a00958095614a37bf1a91aGil Dobjanschipackage com.android.videoeditor.widgets;
18ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
1981393d6dc5767f7784a00958095614a37bf1a91aGil Dobjanschiimport com.android.videoeditor.R;
20ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
21ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.content.Context;
22ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.content.res.Resources;
23ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.graphics.Canvas;
24ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.graphics.drawable.Drawable;
25ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.util.AttributeSet;
26ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.view.MotionEvent;
27ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.widget.ImageView;
28ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
29ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi/**
30ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * The view that represents a resize handle
31ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */
32ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschipublic class HandleView extends ImageView {
33ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    // Instance variables
34ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    private final Drawable mArrowLeft;
35ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    private final Drawable mArrowRight;
36ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    private MoveListener mListener;
37c509d6b57b3dba1d24dd4e68b315f2e565ae47a5Gil Dobjanschi    private float mStartMoveX, mLastMoveX;
38ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    private boolean mMoveStarted;
39ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    private boolean mBeginLimitReached, mEndLimitReached;
40590396edcdcc30e4770d19b8903f81150eab71cbGil Dobjanschi    private int mLastDeltaX;
41ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
42ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    /**
43ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * Move listener
44ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     */
45ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    public interface MoveListener {
46ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        /**
47ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi         * The move begins
48ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi         *
49ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi         * @param view The view
50ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi         */
51ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        public void onMoveBegin(HandleView view);
52ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
53ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        /**
54ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi         * Move is in progress
55ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi         *
56ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi         * @param view The view
57590396edcdcc30e4770d19b8903f81150eab71cbGil Dobjanschi         * @param left The left edge left position
58590396edcdcc30e4770d19b8903f81150eab71cbGil Dobjanschi         * @param delta The offset relative to the left of the view
59ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi         */
60590396edcdcc30e4770d19b8903f81150eab71cbGil Dobjanschi        public boolean onMove(HandleView view, int left, int delta);
61ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
62ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        /**
63ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi         * The move ended
64ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi         *
65ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi         * @param view The view
66590396edcdcc30e4770d19b8903f81150eab71cbGil Dobjanschi         * @param left The left edge left position
67590396edcdcc30e4770d19b8903f81150eab71cbGil Dobjanschi         * @param delta The offset relative to the left of the view
68ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi         */
69590396edcdcc30e4770d19b8903f81150eab71cbGil Dobjanschi        public void onMoveEnd(HandleView view, int left, int delta);
70ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    }
71ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
72ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    /*
73ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * {@inheritDoc}
74ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     */
75ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    public HandleView(Context context, AttributeSet attrs, int defStyle) {
76ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        super(context, attrs, defStyle);
77ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
78ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        // Prepare the handle arrows
79ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        final Resources resources = getResources();
80ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        mArrowLeft = resources.getDrawable(R.drawable.handle_left_arrow);
81ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        mArrowRight = resources.getDrawable(R.drawable.handle_right_arrow);
82ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    }
83ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
84ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    /*
85ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * {@inheritDoc}
86ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     */
87ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    public HandleView(Context context, AttributeSet attrs) {
88ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        this(context, attrs, 0);
89ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    }
90ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
91ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    /*
92ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * {@inheritDoc}
93ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     */
94ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    public HandleView(Context context) {
95ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        this(context, null, 0);
96ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    }
97ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
98ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    /**
99ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * @param listener The listener
100ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     */
101ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    public void setListener(MoveListener listener) {
102ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        mListener = listener;
103ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    }
104ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
105ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    /**
106ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * Set the movement limits
107ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     *
108ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * @param beginLimitReached true if the begin limit was reached
109ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * @param endLimitReached true if the end limit was reached
110ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     */
111ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    public void setLimitReached(boolean beginLimitReached, boolean endLimitReached) {
112ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        // Check if anything has changed
113ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        if (beginLimitReached == mBeginLimitReached && endLimitReached == mEndLimitReached) {
114ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi            return;
115ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        }
116ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
117ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        mBeginLimitReached = beginLimitReached;
118ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        mEndLimitReached = endLimitReached;
119ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
120ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        invalidate();
121ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    }
122ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
123c509d6b57b3dba1d24dd4e68b315f2e565ae47a5Gil Dobjanschi    /**
124c509d6b57b3dba1d24dd4e68b315f2e565ae47a5Gil Dobjanschi     * End the move
125c509d6b57b3dba1d24dd4e68b315f2e565ae47a5Gil Dobjanschi     */
126c509d6b57b3dba1d24dd4e68b315f2e565ae47a5Gil Dobjanschi    public void endMove() {
127c509d6b57b3dba1d24dd4e68b315f2e565ae47a5Gil Dobjanschi        if (mMoveStarted) {
128c509d6b57b3dba1d24dd4e68b315f2e565ae47a5Gil Dobjanschi            endActionMove(mLastMoveX);
129c509d6b57b3dba1d24dd4e68b315f2e565ae47a5Gil Dobjanschi        }
130c509d6b57b3dba1d24dd4e68b315f2e565ae47a5Gil Dobjanschi    }
131c509d6b57b3dba1d24dd4e68b315f2e565ae47a5Gil Dobjanschi
132ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    /*
133ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * {@inheritDoc}
134ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     */
135ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    @Override
136ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    public boolean onTouchEvent(MotionEvent ev) {
137ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        super.onTouchEvent(ev);
138ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
139ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        switch (ev.getAction()) {
140ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi            case MotionEvent.ACTION_DOWN: {
141ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                if (isEnabled()) {
142ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                    // The ScrollView will not get the touch events
143ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                    getParent().requestDisallowInterceptTouchEvent(true);
144ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                    if (mListener != null) {
145ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                        mListener.onMoveBegin(this);
146ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                    }
147ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
148ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                    mStartMoveX = ev.getX();
149ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                    mMoveStarted = true;
150ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                } else {
151ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                    mMoveStarted = false;
152ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                }
153590396edcdcc30e4770d19b8903f81150eab71cbGil Dobjanschi
154590396edcdcc30e4770d19b8903f81150eab71cbGil Dobjanschi                mLastDeltaX = -10000;
155ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                break;
156ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi            }
157ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
158ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi            case MotionEvent.ACTION_MOVE: {
159ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                if (mMoveStarted && isEnabled()) {
160590396edcdcc30e4770d19b8903f81150eab71cbGil Dobjanschi                    final int deltaX = Math.round((ev.getX() - mStartMoveX));
161590396edcdcc30e4770d19b8903f81150eab71cbGil Dobjanschi                    if (deltaX != mLastDeltaX) {
162590396edcdcc30e4770d19b8903f81150eab71cbGil Dobjanschi                        mLastDeltaX = deltaX;
163590396edcdcc30e4770d19b8903f81150eab71cbGil Dobjanschi
164590396edcdcc30e4770d19b8903f81150eab71cbGil Dobjanschi                        if (mListener != null) {
165590396edcdcc30e4770d19b8903f81150eab71cbGil Dobjanschi                            if (getId() == R.id.handle_left) {
166590396edcdcc30e4770d19b8903f81150eab71cbGil Dobjanschi                                mListener.onMove(this, getLeft(), deltaX + getWidth());
167590396edcdcc30e4770d19b8903f81150eab71cbGil Dobjanschi                            } else {
168590396edcdcc30e4770d19b8903f81150eab71cbGil Dobjanschi                                mListener.onMove(this, getLeft(), deltaX);
169590396edcdcc30e4770d19b8903f81150eab71cbGil Dobjanschi                            }
170590396edcdcc30e4770d19b8903f81150eab71cbGil Dobjanschi                        }
171590396edcdcc30e4770d19b8903f81150eab71cbGil Dobjanschi
172590396edcdcc30e4770d19b8903f81150eab71cbGil Dobjanschi                        mLastMoveX = ev.getX();
173ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                    }
174ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                }
175ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                break;
176ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi            }
177ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
178ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi            case MotionEvent.ACTION_CANCEL:
179ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi            case MotionEvent.ACTION_UP: {
180c509d6b57b3dba1d24dd4e68b315f2e565ae47a5Gil Dobjanschi                endActionMove(ev.getX());
181ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                break;
182ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi            }
183ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
184ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi            default: {
185ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                break;
186ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi            }
187ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        }
188ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
189ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        return true;
190ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    }
191ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
192c509d6b57b3dba1d24dd4e68b315f2e565ae47a5Gil Dobjanschi    /**
193c509d6b57b3dba1d24dd4e68b315f2e565ae47a5Gil Dobjanschi     * End the move (if it was in progress)
194c509d6b57b3dba1d24dd4e68b315f2e565ae47a5Gil Dobjanschi     *
195c509d6b57b3dba1d24dd4e68b315f2e565ae47a5Gil Dobjanschi     * @param eventX The event horizontal position
196c509d6b57b3dba1d24dd4e68b315f2e565ae47a5Gil Dobjanschi     */
197c509d6b57b3dba1d24dd4e68b315f2e565ae47a5Gil Dobjanschi    private void endActionMove(float eventX) {
198c509d6b57b3dba1d24dd4e68b315f2e565ae47a5Gil Dobjanschi        if (mMoveStarted) {
199c509d6b57b3dba1d24dd4e68b315f2e565ae47a5Gil Dobjanschi            mMoveStarted = false;
200590396edcdcc30e4770d19b8903f81150eab71cbGil Dobjanschi
2011b5e90e3748ca3ed3bfa5f2d49f18123d373ad0cGil Dobjanschi            if (mListener != null) {
2021b5e90e3748ca3ed3bfa5f2d49f18123d373ad0cGil Dobjanschi                final int deltaX = Math.round((eventX - mStartMoveX));
2031b5e90e3748ca3ed3bfa5f2d49f18123d373ad0cGil Dobjanschi                if (getId() == R.id.handle_left) {
2041b5e90e3748ca3ed3bfa5f2d49f18123d373ad0cGil Dobjanschi                    mListener.onMoveEnd(this, getLeft(), deltaX + getWidth());
2051b5e90e3748ca3ed3bfa5f2d49f18123d373ad0cGil Dobjanschi                } else {
2061b5e90e3748ca3ed3bfa5f2d49f18123d373ad0cGil Dobjanschi                    mListener.onMoveEnd(this, getLeft(), deltaX);
2071b5e90e3748ca3ed3bfa5f2d49f18123d373ad0cGil Dobjanschi                }
208c509d6b57b3dba1d24dd4e68b315f2e565ae47a5Gil Dobjanschi            }
209c509d6b57b3dba1d24dd4e68b315f2e565ae47a5Gil Dobjanschi        }
210c509d6b57b3dba1d24dd4e68b315f2e565ae47a5Gil Dobjanschi    }
211c509d6b57b3dba1d24dd4e68b315f2e565ae47a5Gil Dobjanschi
212ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    /*
213ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * {@inheritDoc}
214ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     */
215ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    @Override
216ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    protected void onDraw(Canvas canvas) {
217ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        super.onDraw(canvas);
218ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
219ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        if (!mBeginLimitReached) {
220ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi            mArrowLeft.setBounds(0, 0, mArrowLeft.getIntrinsicWidth(),
221ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                    mArrowLeft.getIntrinsicHeight());
222ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi            mArrowLeft.draw(canvas);
223ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        }
224ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
225ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        if (!mEndLimitReached) {
226ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi            mArrowRight.setBounds(getWidth() - mArrowRight.getIntrinsicWidth(), 0, getWidth(),
227ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                    mArrowRight.getIntrinsicHeight());
228ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi            mArrowRight.draw(canvas);
229ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        }
230ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    }
231ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi}
232