網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
前言
事實(shí)上,軟件工程的多數(shù)苦惱不是源自缺少工具或管理不當(dāng),而是因?yàn)榧夹g(shù)能力本身的缺乏。
今天給大家分享跟隨手指移動(dòng)的控件,demo展示如下。手指到哪這個(gè)小馬就跑到哪。
使用自定義View組件實(shí)現(xiàn)demo。
第一步
首先創(chuàng)建一個(gè)Android project,我們使用Android studio 自動(dòng)創(chuàng)建 activity。
第二步:
準(zhǔn)備兩張圖片,一個(gè)是大草原背景圖片,一個(gè)是奔跑的馬兒。把這兩種圖片均放在src/main/res/mipmap-xhdpi文件下
第三步:
在 activity_main 文件下設(shè)置布局。一般自定義的組件都是放在幀布局管理器中,將大草原圖片作為布局的背景,并且給布局定一個(gè)id,因?yàn)楹竺孢壿嫶a中會(huì)用到。詳細(xì)代碼如下:
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@mipmap/pic1" android:id="@+id/horse" tools:context=".MainActivity">
第四步
創(chuàng)建一個(gè)java文件,名為:HorseDemo.java ,在這個(gè)文件中主要是設(shè)定馬兒的基本屬性,以及實(shí)例化畫(huà)圖和位圖方法,詳細(xì)代碼如下:
package com.xiaozeng.demo; 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 HorseDemo extends View { //設(shè)置兩個(gè)變量 public float horseX,horseY; //創(chuàng)建構(gòu)造方法 public HorseDemo(Context context) { super(context); horseX = 200; horseY = 300; } //第二步:重寫(xiě)onDraw方法 Ctrl+o @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); //實(shí)例化畫(huà)圖對(duì)象 Paint paint = new Paint(); //位圖對(duì)象 Bitmap bitmap = BitmapFactory.decodeResource(this.getResources(),R.mipmap.pic2); //回收 canvas.drawBitmap(bitmap,horseX,horseY,paint); if(bitmap.isRecycled()){ bitmap.recycle(); } } }
第五步
在 MainActivity 文件中需要獲取布局管理器,并增加觸摸事件監(jiān)聽(tīng)器。完整代碼如下:
package com.xiaozeng.demo; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.widget.FrameLayout; import android.widget.ViewAnimator; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //獲取布局管理器 FrameLayout frameLayout = findViewById(R.id.horse); //實(shí)例化 HorseDemo horseDemo = new HorseDemo(this); //觸摸事件監(jiān)聽(tīng)器 horseDemo.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { //坐標(biāo) horseDemo.horseX = event.getX(); horseDemo.horseY = event.getY(); //重繪 horseDemo.invalidate(); return true; } }); frameLayout.addView(horseDemo); } }
以上就是完整的demo代碼 ??。?!
當(dāng)然也可以參考小編的github https://github.com/Jenny-Zeng/AndroidDemo/tree/main/Demo1
原文鏈接:https://blog.csdn.net/weixin_42182599/article/details/122066628
相關(guān)推薦
- 2022-10-25 Android自定義View實(shí)現(xiàn)水波紋擴(kuò)散效果_Android
- 2022-07-30 Redis實(shí)現(xiàn)訂單過(guò)期刪除的方法步驟_Redis
- 2022-09-01 Oracle?數(shù)據(jù)庫(kù)層級(jí)遍歷查詢(xún)功能的實(shí)現(xiàn)_oracle
- 2023-02-18 C++中std::thread線(xiàn)程用法_C 語(yǔ)言
- 2023-12-21 APP,微信小程序獲取本地緩存,清除 uniApp
- 2022-10-29 在Centos8中安裝配置Redis,實(shí)現(xiàn)遠(yuǎn)程訪問(wèn)
- 2023-11-23 python獲取文件夾內(nèi)所有文件并改名
- 2022-07-30 Linux計(jì)劃任務(wù)介紹
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門(mén)
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支