андроид холст прокрутки - PullRequest
2 голосов
/ 18 мая 2009

Я пишу пасьянс. Я использую холст, чтобы нарисовать все на экране. Иногда колода карт становится больше и расширяется ниже нижней части экрана. Я хотел бы сделать холст прокручиваемым, чтобы пользователь мог получить доступ к этим картам.

основная деятельность

package com.maulinpathare.solitaire;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

public class Solitaire extends Activity{
    /** Called when the activity is first created. */
     private Context mContext;
     private GameView mG;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mContext = this;
        setContentView(R.layout.main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        boolean result = super.onCreateOptionsMenu(menu);
        menu.add(0, 1, 0, R.string.newGame);
        menu.add(0, 2, 0, R.string.exitGame);
        return result;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case 1:
          mG = new GameView(this);
          setContentView(mG);
            return true;
        case 2:
            finish();
            return true;
        }
        return false;
    }

}//end class 

GameView Class Здесь все и происходит Я удалил большую часть игровой логики ...

package com.maulinpathare.solitaire;

import java.util.Stack;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ScrollView;

public class GameView extends ScrollView implements OnTouchListener{
     private Deck mD;
     private boolean mInit, mDone;
     private Stack<Card> mPile1, mPile2, mPile3, mPile4, mPile5, mPile6, mPile7,
                              mOpenPile, mEndPile1, mEndPile2, mEndPile3, mEndPile4, mTemp;
     private Canvas mCanvas;
     private int mPile;
     private boolean mPickUp, mVictory;
     private Card mCard;
     private final int mSpacing = 22;
     private Paint rectPaint, wonPaint1, wonPaint2;

     public GameView(Context context) {
        super(context);
                    //initialize everything needed for the game
    }

    @Override
    protected void onDraw(Canvas canvas) {
     mCanvas = canvas;
     if(mInit){
          initialize();
          mInit = false;
     }
        //draw stuff...

    }//end onDraw

    public boolean onTouch(View v, MotionEvent event){
     int eventAction = event.getAction();
     int x = Math.round(event.getX());
     int y = Math.round(event.getY());

     switch(eventAction){
     case MotionEvent.ACTION_DOWN:
                    //check if touch has happened on one of the card piles
          break; //end case action_touch

     case MotionEvent.ACTION_MOVE:
                    //if card touched move it
          break; //end case action_move

     case MotionEvent.ACTION_UP:
                    //check if legal move has been made
          break; //end case action_up

     }//end switch(event)

     invalidate();
     return true;
    }//end onTouch
}

Где и как мне реализовать прокрутку экрана? Я бы хотел, чтобы пользователь мог двигать пальцем по экрану в направлении прокрутки.

Ответы [ 2 ]

3 голосов
/ 20 мая 2009

См. Android.widget.Scroller и android.view.VelocityTracker. Они позволят вам реализовать пользовательское представление прокрутки.
Кроме того, вы можете просто поместить свой холст в ScrollView ...

0 голосов
/ 08 июня 2009

Интересно, что, как я понял, представления работают в Android: внутренние представления получают все сенсорные события, а события передаются представлениям-оболочкам только в том случае, если onTouchEvent внутренних представлений возвращает 0 с этим), если родительский вид не перехватывает события касания.

Вам нужно переопределить onInterceptTouchEvent, я думаю;

ScrollView

Вы хотите, чтобы перехваченные события передавались дочерним представлениям в большем количестве ситуаций, чем в настоящее время.

Я считаю, что часто полезно посмотреть на источник, поскольку документация может быть неоднозначной.

Извините, я не могу помочь, надеюсь, вы сможете найти ответ, поиграв в расширенном представлении.

Гав

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...