Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java Android中绘制位图并移动它?_Java_Android_Animation - Fatal编程技术网

如何在java Android中绘制位图并移动它?

如何在java Android中绘制位图并移动它?,java,android,animation,Java,Android,Animation,我花了整整一个月的时间试图一起完成这一切 在屏幕上绘制位图 创建时,以恒定速率向下移动位图 当Bimap到达底部时,停止Bimap 允许在位图移动时单击位图(也称为非平移动画) 谢谢你帮我把这一切提前准备好。 以下是我的尝试: package com.example.animating; import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Bitmap

我花了整整一个月的时间试图一起完成这一切

  • 在屏幕上绘制位图
  • 创建时,以恒定速率向下移动位图
  • 当Bimap到达底部时,停止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.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>

主要活动类

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;
} 
}
}   
公共类MainActivity扩展活动
{
第一视图dv;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
dv=新的第一视图(本);
setContentView(R.layout.activity_main);
最终按钮b=(按钮)findViewById(R.id.button1);
b、 setOnClickListener(新的OnClickListener()
{
公共void onClick(视图v){
//TODO自动生成的方法存根
LinearLayout rl=(LinearLayout)findViewById(R.id.textView1);
rl.addView(dv);
b、 设置可见性(视图不可见);
}
});         
}
公共类FirstView扩展了视图{
私人int screenW;
私人互联网;
私人浮动提款;
私人浮动提款;
int moveRate=10,dot1y,dot1x;
私人语境;
私有位图点;
私有布尔dotsking=true,gameOver=false;
公共第一视图(上下文){
超级(上下文);
myContext=上下文;
}
@凌驾
已更改尺寸的受保护空心(整数w、整数h、整数oldw、整数oldh){
super.onSizeChanged(w,h,oldw,oldh);
dot=BitmapFactory.decodeResource(myContext.getResources(),R.drawable.ic_启动器);
屏幕w=w;
屏幕h=h;
drawScaleW=(浮动)屏幕W/800;
drawScaleH=(浮动)屏幕H/600;
dot1y=0+dot.getHeight();
dot1x=w/2-(dot.getWidth()/2);
}
公开募捐{
如果(!gameOver){
animateDot();
使无效();
}
}
@凌驾
受保护的void onDraw(画布){
油漆红色油漆=新油漆();
redPaint.setColor(Color.RED);
画布.drawBitmap(点、点1x、点1y、空);
run();
}
私有void animateDot(){
如果(正在下沉){
如果(dot1y