Canvas基础
import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Paint; import android.os.Bundle; import android.view.Menu; import android.view.MotionEvent; import android.view.View; import android.view.animation.AlphaAnimation; import android.view.animation.Animation; public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(new MyView(this)); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } class MyView extends View { Canvas mCanvas; Bitmap mBitmap; Paint mPaint; float movex, movey; float X_r, Y_r; public MyView(Context context) { super(context); init(); } public void init() { mBitmap = Bitmap.createBitmap(240, 300, Config.ARGB_8888); mCanvas = new Canvas(mBitmap); mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.studycenter_userinfo_back); X_r = -mBitmap.getWidth(); Y_r = -mBitmap.getHeight(); mPaint = new Paint(); mPaint.setColor(0xFFFFFFFF); } protected void onDraw(Canvas canvas) { canvas.drawBitmap(mBitmap, X_r, Y_r, mPaint); System.out.println("onDraw"); super.onDraw(canvas); } @Override public boolean onTouchEvent(MotionEvent event) { float x = event.getX(); float y = event.getY(); switch (event.getAction()) { // 点击时的(x,y),记录初始位置 case MotionEvent.ACTION_DOWN: Animation alphaAnimation = new AlphaAnimation(0.1f, 1.0f); alphaAnimation.setDuration(500); this.startAnimation(alphaAnimation); movex = mBitmap.getWidth() / 2; movey = mBitmap.getHeight() / 2; X_r = x - movex; Y_r = y - movey; mPaint.setAlpha(255); invalidate(); break; // 移动时更新(x,y),同时更新图片 case MotionEvent.ACTION_MOVE: movex = mBitmap.getWidth() / 2; movey = mBitmap.getHeight() / 2; X_r = x - movex; Y_r = y - movey; invalidate(); break; // 弹起时更新(x,y),并记录位置 case MotionEvent.ACTION_UP: mPaint.setAlpha(0); invalidate(); break; } return true; } } }
分类:
android
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构