0

重複の可能性:
カスタムビューからそれが存在するアクティビティに通信する正しい方法は何ですか?

私はまだJavaにまったく慣れていません。

スライダークラスを作りたいです。すべてのスライディングメカニズムをこのクラスで処理してもらいたいのですが、スライダー内で実行されるアクションを抽象化するだけで済みます。

メインコード:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentLayout(R.layout.slider_page);
    slide = (Slider) findViewById(R.id.slider);
    slide.addSlide(R.drawable.slide_blue);
    slide.addSlide(R.drawable.slide_green);

    /* I want to implement the following three functions */
        slide.touched () {
            text.setText("Slider touched")
            // Do stuff
        }

        slide.onSwipeRight() {
            text.setText("Swipe right detected");
            // do more stuff
        }

        slide.touchReleased() {
            text.setText("Slider released");
            // more stuff
        }

}

Slider.java:

public class Slider extends ViewFlipper implements OnTouchListener {
private int SWIPE_MIN_DISTANCE = 100;
private int DOWNTIME_MAX = 300;
private int SWIPETIME_MAX = 870;
private Context mContext;
private float xDownPos;

public Slider(Context context, AttributeSet attrs) {
    super(context, attrs);
    mContext = context;
    this.setOnTouchListener((OnTouchListener) mContext);
}

public void addSlide (int resId) {
    ImageView iv = new ImageView(mContext);
    iv.setImageResource(resId);
    this.addView(iv);
}

public boolean onTouch(View v, MotionEvent event) {
    switch (event.getAction())
    {
        case MotionEvent.ACTION_DOWN:
        {
            // store the X value when the user's finger was pressed down
            xDownPos = event.getX();
            /* How do I get this to return to touched () in the main code? */
            break;
        }

        case MotionEvent.ACTION_UP:
        {
            // Get the X value when the user released his/her finger
            float currentX = event.getX();
            float horizontalMovement = currentX - xDownPos;
            long timePressed = event.getEventTime() - event.getDownTime();

            // Left to Right
            if (horizontalMovement > SWIPE_MIN_DISTANCE && timePressed < SWIPETIME_MAX)
            {
                /* How do I return this to onSwipeRight() in main code? */
            }

            /* How do I return this to touchReleased() in main code? */

            break;
        }
    }
}

したがって、基本的には、メインにコードのtouched()、onSwipeRight()、およびtouchReleased()セグメントを実装し、Slider.javaに何らかのシグナルをメインに送信させてこれを実行するようにします。

4

0 に答える 0