安卓自定义控件---安卓小机器人图标在背景图片上随手指滑动,点击背景图片任意位置出现小机器人图标
大家好,这是我第一次写****技术博客,我准备学习并仿做一个自定义控件,最终实现一个安卓机器人小图标跟随手指滑动在安卓背景界面的效果,也有点击图片中任意位置出现小机器人图标的效果,代码如下:
首先自定义一个myview去继承view这个类,代码如下:
public class Myview extends View {
public float x;//安卓小机器人显示的X坐标
public float y;//安卓小机器人显示的Y坐标
public Myview(Context context){
super(context);
x=300;//默认显示位置X坐标
y=150;//默认显示位置的Y坐标
}
public Myview(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public Myview(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
//重写绘画方法
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//创建画笔对象
Paint paint=new Paint();
//根据资源文件生成位图对象
Bitmap bitmap=BitmapFactory.decodeResource(this.getResources(),R.mipmap.ic_launcher);
//绘制安卓小机器人
canvas.drawBitmap(bitmap,x,y,paint);
if(bitmap.isRecycled()){
bitmap.recycle();//回收图片
}
}
}
接着编写MainActivity,代码如下:
public class MainActivity extends AppCompatActivity {
LinearLayout linearLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
linearLayout=(LinearLayout) findViewById(R.id.linerlayout);
final Myview myview=new Myview(this);
//触摸监听
myview.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
myview.x=event.getX();//设置显示的X坐标
myview.y=event.getY();//设置显示的Y坐标
myview.invalidate();//重新绘制我的组件
return true;
}
});
//在线性布局管理器里加入自定义布局
linearLayout.addView(myview);
}
}
界面定义XML文件代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:orientation="horizontal"
android:background="@drawable/bg"
android:id="@+id/linerlayout"
tools:context="com.test.myapplication.MainActivity">
</LinearLayout>
好了, 第一次的安卓技术博客到此结束,谢谢大家。
首先自定义一个myview去继承view这个类,代码如下:
public class Myview extends View {
public float x;//安卓小机器人显示的X坐标
public float y;//安卓小机器人显示的Y坐标
public Myview(Context context){
super(context);
x=300;//默认显示位置X坐标
y=150;//默认显示位置的Y坐标
}
public Myview(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public Myview(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
//重写绘画方法
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//创建画笔对象
Paint paint=new Paint();
//根据资源文件生成位图对象
Bitmap bitmap=BitmapFactory.decodeResource(this.getResources(),R.mipmap.ic_launcher);
//绘制安卓小机器人
canvas.drawBitmap(bitmap,x,y,paint);
if(bitmap.isRecycled()){
bitmap.recycle();//回收图片
}
}
}
接着编写MainActivity,代码如下:
public class MainActivity extends AppCompatActivity {
LinearLayout linearLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
linearLayout=(LinearLayout) findViewById(R.id.linerlayout);
final Myview myview=new Myview(this);
//触摸监听
myview.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
myview.x=event.getX();//设置显示的X坐标
myview.y=event.getY();//设置显示的Y坐标
myview.invalidate();//重新绘制我的组件
return true;
}
});
//在线性布局管理器里加入自定义布局
linearLayout.addView(myview);
}
}
界面定义XML文件代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:orientation="horizontal"
android:background="@drawable/bg"
android:id="@+id/linerlayout"
tools:context="com.test.myapplication.MainActivity">
</LinearLayout>
实现的效果图如下:
好了, 第一次的安卓技术博客到此结束,谢谢大家。