要求
- 随鼠标而动的红色坐标
- 布局:帧布局
- 任务:创建坐标,可以随鼠标移动
第一步:导入图片
复制图片,选择app->res->mipmap , 粘贴。
选择mipmap-xhdpi,点击OK
第二步:修改xml文件
- 修改布局为帧布局(FramLayout)
- 添加背景图片:
android:background="@mipmap/moon"
- 添加背景布局ID,方便接下来调用:
android:id="@+id/mylayout"
第三部:新建Java class
新建的JavaClass命名为RedpinView,用来展示Redpin
package com.example.rabbit;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.view.View;
public class RedpinView extends View { //继承View类
public float pinmapX; //定义图像位置
public float pinmapY;
public RedpinView(Context context) {
super(context);
pinmapX=290;
pinmapY=130;
}
//右击鼠标,点击Generate-->Override Methods-->onDraw()
@Override //重写OnDraw方法
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint paint = new Paint();//创建画笔对象
Bitmap bitmap = BitmapFactory.decodeResource(this.getResources(),R.mipmap.redpin);//位图对象,接受resource对象和图像资源id
canvas.drawBitmap(bitmap,pinmapX,pinmapY,paint);
if(bitmap.isRecycled()){ //强制回收图片
bitmap.recycle();
}
}
}
第四步:修改MainActivity
获取布局文件,并且添加Redpin
package com.example.rabbit;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.FrameLayout;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FrameLayout frameLayout=(FrameLayout)findViewById(R.id.mylayout);//定义布局管理器
final RedpinView redpinView = new RedpinView(this); //实例化Redpin对象
//添加触摸事件监听器
redpinView.setOnTouchListener(new View.OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) { //重写OnTouch,使得Redpin随着手指移动
redpinView.pinmapX=event.getX();
redpinView.pinmapY=event.getY();
redpinView.invalidate();
return true;
}
});
frameLayout.addView(redpinView);//添加到布局管理器
}
}