zoukankan      html  css  js  c++  java
  • Android 自定义View

    Android 自定义View为MyCustomView。在MyCustomView画了一个Rect,

    颜色为Green,和一个为红色的文字。

    public class MyCustomView extends View{
    
    	 private Paint mPaint;  
         private Context mContext;  
         private static final String mString = "Hello world!";  
    
    	
    	public MyCustomView(Context context) {
    		super(context);
    		// TODO Auto-generated constructor stub
    	}
    	
    	public MyCustomView(Context context, AttributeSet attr) {
    		super(context,attr);
    		// TODO Auto-generated constructor stub
    		
    	}
    	
    	 @Override  
         protected void onDraw(Canvas canvas) {  
             // TODO Auto-generated method stub  
             super.onDraw(canvas);  
               
             mPaint = new Paint();  
             
             mPaint.setColor(Color.GREEN);
             mPaint.setStyle(Style.FILL);
             
             canvas.drawRect(new Rect(10, 10, 300, 500), mPaint);  
               
             mPaint.setColor(Color.RED);  
             canvas.drawText(mString, 50, 550, mPaint); 
    	 }
    }

     将自定义的View添加到activity_main的Layout中

    <?xml version="1.0" encoding="utf-8"?>  
        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
            android:orientation="vertical"  
            android:layout_width="fill_parent"  
            android:layout_height="fill_parent"  
            >  
        <TextView    
            android:layout_width="fill_parent"   
            android:layout_height="wrap_content"   
            android:text="@string/hello_world"  
            />  
       <com.example.customview.MyCustomView 
           android:layout_width="fill_parent"
           android:layout_height="fill_parent"
           />
        </LinearLayout>
    

     参考

    其中Layout中的<com.example.customview.MyCustomView />就是对该自定义控件的使用。


    二、为MyCustomView添加自定义属性

    在value文件夹下建attrs.xml文件。 定义了两个属性,分别为文本颜色和文本大小。

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <declare-styleable name="MyView">
            <attr name="textColor" format="color" />
            <attr name="textSize" format="dimension" />
        </declare-styleable>
    </resources>
    

    MyCustomView类更改如下

    public class MyCustomView extends View {
    
    	private Paint mPaint;
    	private Context mContext;
    	private static final String mString = "Hello world!";
    	public MyCustomView(Context context) {
    		super(context);
    		mPaint = new Paint();
    	}
    
    
    	public MyCustomView(Context context, AttributeSet attr) {
    		super(context, attr);
    		mPaint = new Paint();
    		TypedArray array = context.obtainStyledAttributes(attr, R.styleable.MyView);
    		int textColor = array.getColor(R.styleable.MyView_textColor, 0XFFFFFFFF);
    		float textSize = array.getDimension(R.styleable.MyView_textSize, 30);
    		mPaint.setColor(textColor);
    		mPaint.setTextSize(textSize);
    		
    		array.recycle(); //TypedArray通常最后调用 .recycle() 方法,为了保持以后使用该属性一致性!
    		
    	}
    
    	@Override
    	protected void onDraw(Canvas canvas) {
    
    		// TODO Auto-generated method stub
    
    		super.onDraw(canvas);
    		mPaint.setStyle(Style.FILL);
    		canvas.drawRect(new Rect(10, 10, 300, 500), mPaint);
    		mPaint.setColor(Color.RED);
    		canvas.drawText(mString, 50, 550, mPaint);
    	}
    
    }
    

    Layout更改如下

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:test="http://schemas.android.com/apk/res/com.example.customviewdemo"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity" >
    
        <com.example.customviewdemo.MyCustomView
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            test:textColor="#00ff00"
            test:textSize="20sp" />
    
    </RelativeLayout>
    

      注意:1. xmlns:test=http://schemas.android.com/apk/res/com.example.customviewdemo  test是自定义的,名字随便取。com.example.customviewdemo 是包名。

         2. test:textColor="#00ff00" test:textSize="20sp" 这两个就是要调用的自定义属性。

      效果如下图:

      

    作者:Work Hard Work Smart
    出处:http://www.cnblogs.com/linlf03/
    欢迎任何形式的转载,未经作者同意,请保留此段声明!

  • 相关阅读:
    Spring Boot
    Spring Boot – Jetty配置
    如何使ESLint在Visual Studio 2019和2017中工作: 2019 v16和2017> = v15.8
    CentOS 7 安装 Nginx
    HTTPS-使用Certbot自动配置Let’s Encrypt证书
    centos7升级内核到最新版本
    [C#.net]Connection Timeout和Command Timeout
    Redis中切换db
    Redis 模糊查询删除操作
    [Abp vNext 源码分析]
  • 原文地址:https://www.cnblogs.com/linlf03/p/2958109.html
Copyright © 2011-2022 走看看