0

好的,我基本上只是想弄清楚如何绘制一个在屏幕上移动的图像,然后从那里获取它。我已经阅读了一些关于绘图、使用绘图、onDraw() 等的教程,并在网上搜索了一段时间,但不确定我做错了什么。基本上应用程序加载正常,它导航到页面,但从不绘制图像。可能是我错过了一些愚蠢的事情。

这是 myclass "BlackJack",它是 Activity 类。

public class BlackJack extends Activity {
BlackJackDrawCard newCard;
Deck deck;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_black_jack);
    deck = new Deck(this.getResources());
    deck.shuffle();
    newCard = new BlackJackDrawCard(this, deck.getCard(4) );
}

BlackJackDrawCard 就是这个类,我实际上在其中抽牌:

public class BlackJackDrawCard extends View{

    Bitmap card;
    float x, y;
    public BlackJackDrawCard(Context context, Bitmap i) {
        super(context);
        card=i;
        x=0;
        y=0;

    }
    @Override
    public void onDraw(Canvas canvas){

        canvas.drawBitmap(card, x, y, null);
        x+=5;
        y+=5;
        invalidate();
    }


}

“甲板”是我的课程,显然是一副纸牌。它包含一个由 52 张卡片组成的数组列表,每张卡片的值为“img”,其中包含相应的位图图像。deck.getCard(i) 返回卡片的位图图像。

4

1 回答 1

1

您可能需要考虑以下几点:

如果 BlackJackDrawCard 的目的是绘制图像,那么从 ImageView 扩展而来不是更好吗?

此外,您不应该在 onDraw 方法中调用 invalidate - 它会导致无限循环的绘图。

如果要以这种方式创建视图,则需要设置其布局参数。确保视图将显示您提供的整个位图的一种方法是将布局参数设置为位图的宽度和高度:

public BlackJackDrawCard(Context context, Bitmap i) 
    {
        super(context); 

        card = i;

        setLayoutParams(new RelativeLayout.LayoutParams(card .getWidth(), card .getHeight())); // Assuming the view will be inside a relative layout.
    }

为了使您的视图动画化,最好使用 Animation 类。这是一个例子:

(在你里面 Activity 类:)

public void animateCard(BlackJackDrawCard card, int amountToMoveRight, int amountToMoveDown)
{
    TranslateAnimation animation = new TranslateAnimation(0, amountToMoveRight, 0, amounttoMoveDown);
    animation.setDuration(1000); // duration in millisec

    card.startAnimation(animation);
}

希望这可以帮助您入门:)

于 2013-10-11T03:02:05.057 回答