博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android+onTouchEventView+背景图片
阅读量:4634 次
发布时间:2019-06-09

本文共 2888 字,大约阅读时间需要 9 分钟。

android+onTouchEventView+背景图片 在android上对一幅背景图片进行划线

(2011-11-30 16:20:39)
标签:

分类:
下面一段程序用于在android上对一幅背景图片进行划线(包括曲线在内)。
分析:
使用view类和onTouchEvent来实现。
新建一个CircleView 类,这个类继承View类,在这个类中覆写了onDraw(),并通过调用一个线程来时刻刷新界面(postInvalidate),界面上的东东全部在onDraw()函数中。onDraw()函数中的canvas.drawBitmap(resizedBitmap1,0,0,paint)表示将resizedBitmap1画在画布canvas上。由前面的对于canvas的设置知道,我们新建了一个
Bitmap resizedBitmap1
,并将其作为canvas的背景画布,通过对onTouchEvent的监视,将手触信息保存在path中,并通过这个调用:canvas.drawPath(path, paint),将path画在画布上。我们实例化CircleView mGameView = new CircleView(this); ,并设置背景图片(
mGameView.setBackgroundDrawable(getResources().getDrawable(R.drawable.logo) )),因此就实现了对一幅背景图片进行划线。
 
 
package cn.mydraw.rxm;
 
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
 
public class MydrawActivity extends Activity {
   
Path path = new Path();
 
private CircleView mGameView =null;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
        mGameView = new CircleView(this);
       
mGameView.setBackgroundDrawable(getResources().getDrawable(R.drawable.logo) );//设置的背景图片
        setContentView(mGameView);
    }
 
    
    
    
     class CircleView extends View implements Runnable{
    int x,y;
    Canvas canvas;
    Bitmap resizedBitmap1 ;
    Paint paint;
    DisplayMetrics  dm = new DisplayMetrics(); 
     
   
    CircleView(Context context)//构造函数
    {
   
    super(context);
    getWindowManager().getDefaultDisplay().getMetrics(dm); // 获取手机屏幕的大小
    int  view_w = dm.widthPixels; 
    int   view_h = dm.heightPixels; 
    paint=new Paint();
    paint.setColor(Color.RED);
    
    paint.setStyle(Paint.Style.STROKE);     
   
resizedBitmap1 = Bitmap.createBitmap(view_w, view_h, Config.ARGB_8888);
   
canvas = new Canvas(resizedBitmap1);//第一步:构造函数中,将resizedBitmap1作为画布背景
 
    new Thread(this).start();
    }
   
    public boolean onTouchEvent(MotionEvent event)
    {
    x=(int) event.getX();
    y=(int) (event.getY()-40);
 
    switch (event.getAction()) 
    {
     case MotionEvent.ACTION_DOWN:
     path.moveTo(x, y);
      break;
      
     case MotionEvent.ACTION_MOVE:
     path.lineTo(x, y);      
   
 
   canvas.drawPath(path, paint);//第二步:指定轨迹画图,将path画在画布上          
     
      break;
      
     case MotionEvent.ACTION_UP:
     
      break;
      
     default:            
      break;
       
    }
 
         return true;
}
   
   
   
    @Override
    public  void onDraw(Canvas canvas) {
 
            super.onDraw(canvas);
           
canvas.drawBitmap(resizedBitmap1,0,0,paint);//第三步:时刻显示画布上的布景
 
    }
 
   
    public void run()
    {
    while (!Thread.currentThread().isInterrupted())
    {
    try
    {
    Thread.sleep(20);
    }
    catch (InterruptedException e)
    {
    Thread.currentThread().interrupt();
    }
    // 使用postInvalidate可以直接在线程中更新界面
   
postInvalidate();
    }
    }
 
    }
    
 
   
 
   
 
   
 
  
    }
    
    
 
    
 

转载于:https://www.cnblogs.com/wenbo-chen/p/3373489.html

你可能感兴趣的文章
iOS开发UI篇—transframe属性(形变)
查看>>
3月7日 ArrayList集合
查看>>
正则替换
查看>>
jsp 环境配置记录
查看>>
本地视频播放黑屏,有声音
查看>>
Python3-Cookbook总结 - 第一章:数据结构和算法
查看>>
Python03
查看>>
LOJ 2537 「PKUWC2018」Minimax
查看>>
使用java中replaceAll方法替换字符串中的反斜杠
查看>>
Android初学第36天
查看>>
Some configure
查看>>
.net core 中的[FromBody]
查看>>
json_encode时中文编码转正常状态
查看>>
流量调整和限流技术 【转载】
查看>>
Axure 全局辅助线(转)
查看>>
正由另一进程使用,因此该进程无法访问此文件。
查看>>
1 线性空间
查看>>
VS不显示最近打开的项目
查看>>
MyEclipse安装Freemarker插件
查看>>
计算多项式的值
查看>>