如何在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