安卓开发之引入布局中自定义控件、OnDraw()绘图

本文介绍了一种自定义地图视图的实现方法,通过继承View并使用Canvas进行地图绘制。文章详细展示了如何设置地图视图的尺寸,并利用Paint对象绘制地图边界。此外,还介绍了如何通过invalidate()方法刷新视图。

引用布局:

  <com.example.aa.Mapp
        android:id="@+id/map"
        android:layout_width="match_parent"  
        android:layout_height="0dp"           
        android:layout_weight="1"    
        ></com.example.aa.Mapp>

Mapp中代码

public class Mapp extends View 
{
private Paint paint;
private int mapp_height;
private int mapp_width;
private int x1,y1,x2,y2;

        public Mapp(Context context,AttributeSet attrs) 
	    {  
            super(context,attrs);  
            
            final DisplayMetrics dm = new DisplayMetrics();
    		((Activity) getContext()).getWindowManager().getDefaultDisplay().getMetrics(dm);
            mapp_height = 250 * 3;
    		mapp_width = dm.widthPixels;
    		
    		// 创建画笔
            paint = new Paint();
            
        
            
            x1 = (int)(mapp_width / 10);
            y1 = (int)(mapp_height / 10);
            x2 = mapp_width - (int)(mapp_width / 20);
            y2 = mapp_height - (int)(mapp_height / 20);
        }  
          
        @Override  
        protected void onDraw(Canvas canvas) 
        {  
            super.onDraw(canvas);  
            canvas.drawColor(Color.BLACK);  
            
            // 画笔颜色为灰色
            paint.setColor(Color.GRAY);
            // 宽度3个像素
            paint.setStrokeWidth(3);
            //字体大小自动适应(320分辨率用8号字体)
            paint.setTextSize((int)(8*mapp_width/320));
            
            canvas.drawLine(x1, y1, x2, y1, paint);
            canvas.drawLine(x1, y1, x1, y2, paint);
            canvas.drawLine(x1, y2, x2, y2, paint);
            canvas.drawLine(x2, y1, x2, y2, paint);
        }
}

刷新:

Mapp view = (Mapp)findViewById(R.id.map);
view.invalidate();

备注:layoutparams可以解决自定义控件占据屏幕区域的问题。

view.invalidate();

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值