[转载]Android 自定义view(可重用)-Android开发进阶&经验分享-eoe Android开发者社区_Android开发论坛 – Powered by Discuz!.
Android提供了强大的可复用组件,但特殊情况需要自己的自定义的View组件,下面自定义一个View。
首先在values/attrs.xml中定义好自定义的View会有哪些属性需要在XML中配置:
< span class = "pln" >< ? xml version = "1.0" encoding = "utf-8" </span>< span class = "pun" >?></ span >< span class = "pln" > < resources > < declare-styleable name = "MyView" > < attr name = "textColor" format = "color" /> < attr name = "textSize" format = "dimension" /> //在attrs中定义background < attr name = "imgBackground" format = "integer" /> < attr name = "textPaddingLeft" format = "dimension" /> < attr name = "textPaddingTop" format = "dimension" /> < / declare-styleable > < / resources ></ span > |
如果需要在配置文件中使用该自定义组件,注意一定要重写public View(Context context, AttributeSet attrs)的构造方法,而不是public View(Context context)。如果只需要在程序中利用代码使用该组件可以只覆写public View(Context context)
编写自定义的View-MyView.Java,继承View。
<span class = "pln" > </span><span class = "kwd" > package </span><span class = "pln" > eoe</span><span class = "pun" >.</span><span class = "pln" >cuntomizedview</span><span class = "pun" >;</span><span class = "pln" > </span><span class = "kwd" > import </span><span class = "pln" > java</span><span class = "pun" >.</span><span class = "pln" >util</span><span class = "pun" >.</span><span class = "typ" >Calendar</span><span class = "pun" >;</span><span class = "pln" > </span><span class = "kwd" > import </span><span class = "pln" > test</span><span class = "pun" >.</span><span class = "pln" >cuntomizedview</span><span class = "pun" >.</span><span class = "pln" >R</span><span class = "pun" >;</span><span class = "pln" > </span><span class = "kwd" > import </span><span class = "pln" > android</span><span class = "pun" >.</span><span class = "pln" >content</span><span class = "pun" >.</span><span class = "typ" >Context</span><span class = "pun" >;</span><span class = "pln" > </span><span class = "kwd" > import </span><span class = "pln" > android</span><span class = "pun" >.</span><span class = "pln" >content</span><span class = "pun" >.</span><span class = "pln" >res</span><span class = "pun" >.</span><span class = "typ" >TypedArray</span><span class = "pun" >;</span><span class = "pln" > </span><span class = "kwd" > import </span><span class = "pln" > android</span><span class = "pun" >.</span><span class = "pln" >graphics</span><span class = "pun" >.</span><span class = "typ" >Canvas</span><span class = "pun" >;</span><span class = "pln" > </span><span class = "kwd" > import </span><span class = "pln" > android</span><span class = "pun" >.</span><span class = "pln" >graphics</span><span class = "pun" >.</span><span class = "typ" >Color</span><span class = "pun" >;</span><span class = "pln" > </span><span class = "kwd" > import </span><span class = "pln" > android</span><span class = "pun" >.</span><span class = "pln" >graphics</span><span class = "pun" >.</span><span class = "typ" >Paint</span><span class = "pun" >;</span><span class = "pln" > </span><span class = "kwd" > import </span><span class = "pln" > android</span><span class = "pun" >.</span><span class = "pln" >os</span><span class = "pun" >.</span><span class = "typ" >SystemClock</span><span class = "pun" >;</span><span class = "pln" > </span><span class = "kwd" > import </span><span class = "pln" > android</span><span class = "pun" >.</span><span class = "pln" >util</span><span class = "pun" >.</span><span class = "typ" >AttributeSet</span><span class = "pun" >;</span><span class = "pln" > </span><span class = "kwd" > import </span><span class = "pln" > android</span><span class = "pun" >.</span><span class = "pln" >view</span><span class = "pun" >.</span><span class = "typ" >View</span><span class = "pun" >;</span><span class = "pln" > </span><span class = "kwd" > public </span><span class = "pln" > </span><span class = "kwd" > class </span><span class = "pln" > </span><span class = "typ" >MyView</span><span class = "pln" > </span><span class = "kwd" > extends </span><span class = "pln" > </span><span class = "typ" >View</span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > </span><span class = "kwd" > private </span><span class = "pln" > </span><span class = "typ" >Paint</span><span class = "pln" > mPaint</span><span class = "pun" >;</span><span class = "pln" > </span><span class = "kwd" > private </span><span class = "pln" > </span><span class = "typ" >Context</span><span class = "pln" > mContext</span><span class = "pun" >;</span><span class = "pln" > </span><span class = "kwd" > private </span><span class = "pln" > </span><span class = "typ" >String</span><span class = "pln" > mStr</span><span class = "pun" >;</span><span class = "pln" > </span><span class = "kwd" > public </span><span class = "pln" > </span><span class = "typ" >MyView</span><span class = "pun" >(</span><span class = "typ" >Context</span><span class = "pln" > context</span><span class = "pun" >,</span><span class = "pln" > </span><span class = "typ" >AttributeSet</span><span class = "pln" > attrs</span><span class = "pun" >)</span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > </span><span class = "kwd" > super </span><span class = "pun" >(</span><span class = "pln" >context</span><span class = "pun" >,</span><span class = "pln" > attrs</span><span class = "pun" >);</span><span class = "pln" > mContext </span><span class = "pun" >=</span><span class = "pln" > context</span><span class = "pun" >;</span><span class = "pln" > nitMyView</span><span class = "pun" >();</span><span class = "pln" > </span><span class = "com" > /*获取在xml中配置的属性值*/ </span><span class = "pln" > </span><span class = "typ" >TypedArray</span><span class = "pln" > </span><span class = "kwd" >params</span><span class = "pln" > </span><span class = "pun" >=</span><span class = "pln" > context</span><span class = "pun" >.</span><span class = "pln" >obtainStyledAttributes</span><span class = "pun" >(</span><span class = "pln" >attrs</span><span class = "pun" >,</span><span class = "pln" >R</span><span class = "pun" >.</span><span class = "pln" >styleable</span><span class = "pun" >.</span><span class = "typ" >MyView</span><span class = "pun" >);</span><span class = "pln" > </span><span class = "com" > //取得</span><span class="pln"> backgroundint backgroudId </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "kwd" >params</span><span class = "pun" >.</span><span class = "pln" >getResourceId</span><span class = "pun" >(</span><span class = "pln" > R</span><span class = "pun" >.</span><span class = "pln" >styleable</span><span class = "pun" >.</span><span class = "typ" >MyView_imgBackground</span><span class = "pun" >,</span><span class = "pln" > </span><span class = "lit" > 0 </span><span class = "pun" >);</span><span class = "pln" > </span><span class = "kwd" > if </span><span class = "pln" > </span><span class = "pun" >(</span><span class = "pln" >backgroudId </span><span class = "pun" >!=</span><span class = "pln" > </span><span class = "lit" > 0 </span><span class = "pun" >)</span><span class = "pln" > setBackgroundResource</span><span class = "pun" >(</span><span class = "pln" >backgroudId</span><span class = "pun" >);</span><span class = "pln" > </span><span class = "kwd" > int </span><span class = "pln" > textColor </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "kwd" >params</span><span class = "pun" >.</span><span class = "pln" >getColor</span><span class = "pun" >(</span><span class = "pln" >R</span><span class = "pun" >.</span><span class = "pln" >styleable</span><span class = "pun" >.</span><span class = "typ" >MyView_textColor</span><span class = "pun" >,</span><span class = "lit" > 0XFFFFFFFF </span><span class = "pun" >);</span><span class = "pln" > setTextColor</span><span class = "pun" >(</span><span class = "pln" >textColor</span><span class = "pun" >);</span><span class = "pln" > </span><span class = "kwd" > float </span><span class = "pln" > textSize </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "kwd" >params</span><span class = "pun" >.</span><span class = "pln" >getDimension</span><span class = "pun" >(</span><span class = "pln" >R</span><span class = "pun" >.</span><span class = "pln" >styleable</span><span class = "pun" >.</span><span class = "typ" >MyView_textSize</span><span class = "pun" >,</span><span class = "pln" > </span><span class = "lit" > 36 </span><span class = "pun" >);</span><span class = "pln" > setTextSize</span><span class = "pun" >(</span><span class = "pln" >textSize</span><span class = "pun" >);</span><span class = "pln" > </span><span class = "kwd" > float </span><span class = "pln" > paddingLeft </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "kwd" >params</span><span class = "pun" >.</span><span class = "pln" >getDimension</span><span class = "pun" >(</span><span class = "pln" >R</span><span class = "pun" >.</span><span class = "pln" >styleable</span><span class = "pun" >.</span><span class = "typ" >MyView_textPaddingLeft</span><span class = "pun" >,</span><span class = "pln" > </span><span class = "lit" > 41 </span><span class = "pun" >);</span><span class = "pln" > </span><span class = "kwd" > float </span><span class = "pln" > paddingTop </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "kwd" >params</span><span class = "pun" >.</span><span class = "pln" >getDimension</span><span class = "pun" >(</span><span class = "pln" >R</span><span class = "pun" >.</span><span class = "pln" >styleable</span><span class = "pun" >.</span><span class = "typ" >MyView_textPaddingTop</span><span class = "pun" >,</span><span class = "pln" > </span><span class = "lit" > 21 </span><span class = "pun" >);</span><span class = "pln" > setPaddings</span><span class = "pun" >(</span><span class = "pln" >paddingLeft</span><span class = "pun" >,</span><span class = "pln" > paddingTop</span><span class = "pun" >);</span><span class = "pln" > </span><span class = "pun" >}</span><span class = "pln" > </span><span class = "lit" > @Override </span><span class = "pln" > </span><span class = "kwd" > protected </span><span class = "pln" > </span><span class = "kwd" > void </span><span class = "pln" > onDraw</span><span class = "pun" >(</span><span class = "typ" >Canvas</span><span class = "pln" > canvas</span><span class = "pun" >)</span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > </span><span class = "kwd" > super </span><span class = "pun" >.</span><span class = "pln" >onDraw</span><span class = "pun" >(</span><span class = "pln" >canvas</span><span class = "pun" >);</span><span class = "pln" > </span><span class = "kwd" > if </span><span class = "pun" >(</span><span class = "pln" >mStr </span><span class = "pun" >!=</span><span class = "pln" > </span><span class = "kwd" > null </span><span class = "pun" >)</span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > canvas</span><span class = "pun" >.</span><span class = "pln" >drawText</span><span class = "pun" >(</span><span class = "pln" >mStr</span><span class = "pun" >,</span><span class = "pln" > </span><span class = "lit" > 0 </span><span class = "pun" >,</span><span class = "pln" > </span><span class = "lit" > 0 </span><span class = "pun" >,</span><span class = "pln" > mPaint</span><span class = "pun" >);</span><span class = "pln" > </span><span class = "pun" >}</span><span class = "pln" > canvas</span><span class = "pun" >.</span><span class = "pln" >drawText</span><span class = "pun" >(“</span><span class = "pln" >heiheihei</span><span class = "pun" >”,</span><span class = "pln" > </span><span class = "lit" > 30 </span><span class = "pun" >,</span><span class = "pln" > </span><span class = "lit" > 60 </span><span class = "pun" >,</span><span class = "pln" > mPaint</span><span class = "pun" >);</span><span class = "pln" > </span><span class = "pun" >}</span><span class = "pln" > </span><span class = "kwd" > private </span><span class = "pln" > </span><span class = "kwd" > void </span><span class = "pln" > initMyView</span><span class = "pun" >()</span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > mPaint </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "kwd" > new </span><span class = "pln" > </span><span class = "typ" >Paint</span><span class = "pun" >();</span><span class = "pln" > mPaint</span><span class = "pun" >.</span><span class = "pln" >setColor</span><span class = "pun" >(</span><span class = "typ" >Color</span><span class = "pun" >.</span><span class = "pln" >WHITE</span><span class = "pun" >);</span><span class = "pln" > </span><span class = "pun" >}</span><span class = "pln" > </span><span class = "kwd" > private </span><span class = "pln" > </span><span class = "kwd" > void </span><span class = "pln" > setTextColor</span><span class = "pun" >(</span><span class = "kwd" > int </span><span class = "pln" > textColor</span><span class = "pun" >)</span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > mPaint</span><span class = "pun" >.</span><span class = "pln" >setColor</span><span class = "pun" >(</span><span class = "lit" > 0XFFAABBCC </span><span class = "pun" >);</span><span class = "pln" > </span><span class = "pun" >}</span><span class = "pln" > </span><span class = "kwd" > private </span><span class = "pln" > </span><span class = "kwd" > void </span><span class = "pln" > setTextSize</span><span class = "pun" >(</span><span class = "kwd" > float </span><span class = "pln" > textSize</span><span class = "pun" >)</span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > mPaint</span><span class = "pun" >.</span><span class = "pln" >setTextSize</span><span class = "pun" >(</span><span class = "pln" >textSize</span><span class = "pun" >);</span><span class = "pln" > </span><span class = "pun" >}</span><span class = "pln" > </span><span class = "kwd" > private </span><span class = "pln" > </span><span class = "kwd" > void </span><span class = "pln" > setPaddings</span><span class = "pun" >(</span><span class = "kwd" > float </span><span class = "pln" > paddingLeft</span><span class = "pun" >,</span><span class = "pln" > </span><span class = "kwd" > float </span><span class = "pln" > paddingTop</span><span class = "pun" >)</span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > setPadding</span><span class = "pun" >((</span><span class = "kwd" > int </span><span class = "pun" >)</span><span class = "pln" >paddingLeft</span><span class = "pun" >,</span><span class = "pln" > </span><span class = "pun" >(</span><span class = "kwd" > int </span><span class = "pun" >)</span><span class = "pln" >paddingTop</span><span class = "pun" >,</span><span class = "pln" > </span><span class = "lit" > 0 </span><span class = "pun" >,</span><span class = "pln" > </span><span class = "lit" > 0 </span><span class = "pun" >);</span><span class = "pln" > </span><span class = "pun" >}</span><span class = "pln" > </span><span class = "pun" >}</span> |
注意怎样在attrs中怎样定义background并取得background。
在layout中使用MyView
< span class = "pln" > < ? xml version = "1.0" encoding = "utf-8" </span>< span class = "pun" >?></ span >< span class = "pln" > android:orientation = "vertical" android:layout_width = "fill_parent" android:layout_height = "fill_parent" > < test.cuntomizedview.MyView android:id = "@+id/v" android:layout_width = "fill_parent" android:layout_height = "fill_parent" app:textColor = "#FFFFFFFF" app:textSize = "40dip" app:textPaddingLeft = "40dip" app:textPaddingTop = "40dip" app:imgBackground = "@drawable/bg_time" /> < / LinearLayout ></ span > |