繁体   English   中英

如何在Java Android中绘制位图并将其移动?

[英]how to draw a Bitmap and move it in java Android?

我花了一个月的时间尝试一起完成所有这些工作。

  • 在屏幕上绘制位图
  • 创建时以恒定速率向下移动位图
  • 到达底部时停止Bimap
  • 允许在位图移动时单击它(也就是不翻译动画)

多谢您协助预先将所有内容整合在一起。 这是我的尝试:

package com.example.animating;

import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.View;


public class FirstView extends View {

    private int screenW;
    private int screenH;

    private float drawScaleW;
    private float drawScaleH;

    int moveRate = 10, dot1y, dot1x;

    private Context myContext;

    private Bitmap dot;
    private boolean dotSinking = true, gameOver = false;

    public FirstView(Context context) {
        super(context);
        myContext = context;
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        dot = BitmapFactory.decodeResource(myContext.getResources(), R.drawable.dot);
        screenW = w;
        screenH = h;
        drawScaleW = (float) screenW / 800;
        drawScaleH = (float) screenH / 600;
        dot1y = (int) (475*drawScaleH);
        dot1x = (int) (55*drawScaleW);
    }

    public void run() {
        if (!gameOver) {
            animateDot();
        }
    }

    @SuppressLint("DrawAllocation")
    @Override
    protected void onDraw(Canvas canvas) {
        Paint redPaint = new Paint();
        redPaint.setColor(Color.RED);
        canvas.drawBitmap(dot, dot1x, dot1y, null);
    }

    private void animateDot(){
        if (dotSinking) {
            dot1y -= moveRate;
        }
    }
}

您应该在onDraw()中使用invalidate()方法,使其重绘位图的新位置。 并使其停止,直到我到达底部时,在if语句中使用setbounds方法为您的位图停止,该语句告诉位图,当screec的距离为0时使其停止。 您应该将onclicklistener设置为bitmap.to.make.clickable。 希望这对您有帮助!

回答问题的第一部分

activity_main.xml中

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >

<LinearLayout
    android:id="@+id/textView1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_above="@+id/button1"
     />

<Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    android:text="Button" />

</RelativeLayout>

MainActivity类

public class MainActivity extends Activity
{
     FirstView dv;
     @Override
     protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    dv = new FirstView(this);
    setContentView(R.layout.activity_main);
    final Button b= (Button) findViewById(R.id.button1);
    b.setOnClickListener(new OnClickListener()
    {
        public void onClick(View v) {
            // TODO Auto-generated method stub
            LinearLayout rl= (LinearLayout ) findViewById(R.id.textView1);
            rl.addView(dv);
            b.setVisibility(View.INVISIBLE);

        }
    });         
}
public class FirstView extends View {

private int screenW;
private int screenH;

private float drawScaleW;
private float drawScaleH;

int moveRate = 10, dot1y, dot1x;

private Context myContext;

private Bitmap dot;
private boolean dotSinking = true, gameOver = false;


public FirstView(Context context) {
super(context);
myContext = context;
}

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
dot = BitmapFactory.decodeResource(myContext.getResources(), R.drawable.ic_launcher);
screenW = w;
screenH = h;
drawScaleW = (float) screenW / 800;
drawScaleH = (float) screenH / 600;
dot1y = 0+dot.getHeight();
dot1x = w/2-(dot.getWidth()/2);
}

public void run() {
if (!gameOver) {
    animateDot();  
    invalidate();
}
}
@Override
protected void onDraw(Canvas canvas) {
Paint redPaint = new Paint();
redPaint.setColor(Color.RED);
canvas.drawBitmap(dot, dot1x, dot1y, null);
run();
}
private void animateDot(){
if (dotSinking) {
    if(dot1y<screenH-dot.getHeight())
    dot1y += moveRate;
} 
}
}   

我在屏幕底部有一个按钮。 单击时(按钮变为不可见),图像从顶部移到布局的高度。 当达到布局高度时,它停止。

在此处输入图片说明 我不知道如何为图像移动添加点击侦听器。

回答了问题的第一部分。 根据需要修改以上内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM