Apprentissage de la vue personnalisée Android 1
1.Section 1
Introduction aux vues personnalisées
Les vues personnalisées peuvent être considérées comme héritant de View (ou d'effets) non fournis par le système View.
-
Quand les constructeurs de View sont-ils appelés ?
-
** Méthode de mesure de vue personnalisée (onMeasure()) **
// Récupère les modes largeur et hauteur
int width = MeasureSpec.getMode(widthMeasureSpec);
int height = MeasureSpec.getMode(heightMeasureSpec;
//Trois modes
MeasureoSpec.AT_MOST : wrap_content est spécifié dans la mise en page
MeasureSpec.EXACTLY : une valeur exacte est spécifiée dans la mise en page telle que 100 dp
MeasureSpec.UNSPECIFIED : aussi grande que possible, rarement utilisée, lorsqu'elle est utilisée avec listview scrollview Utilisé
ScrollView + ListView affichera une solution incomplète au problème
Mesurez et calculez la hauteur, puis réinitialisez la hauteur (la solution de vue de liste personnalisée est comme indiqué ci-dessous)
3.** Méthode de dessin de vue personnalisée (onDraw())**
canvas.drawText(); //画文本
canvas.drawArc(); //画弧
canvas.drawCircle(); //画圆
4.** Méthodes personnalisées de traitement des vues et d'interaction utilisateur (onTouch())**
三种状态
MotionEvent.ACTION_DOWN //手指按下
MotionEvent.ACTION_MOVE //手指移动
MotionEvent.ACTION_UP //手指抬起
5.** Propriétés personnalisées de la vue personnalisée (pour la configuration)**
1. Définir dans le fichier attrs.xml
<resources>
// 自定义TextView
<declare-styleable name="TextView">
// name 是名称,format是格式 color(颜色),string(文本),dimension(sp,dp)...
<attr name="textColor" format="color"/>
<attr name="text" format="string"/>
<attr name="textSize" format="dimension"/>
</declare-styleable>
</resources>
2. Utilisé dans les fichiers de mise en page
<com.darren.view.TextView
// app: 自定义属性
app:text="自定义文本"
app:textColor="@color/colorAccent"
app:textSize="18sp"
// android: 系统自带的属性
android:layout_width="wrap_content"
android:layout_height="match_parent" />
3. Obtenez des propriétés personnalisées dans le code
public TextView(Context context) {
this(context,null);
}
public TextView(Context context, AttributeSet attrs) {
this(context, attrs,0);
}
public TextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
// 获取TypedArray
TypedArray typedArray = context.obtainStyledAttributes(attrs,R.styleable.TextView);
// 获取文本
mText = typedArray.getText(R.styleable.TextView_text);
// 获取文字颜色
mTextColor = typedArray.getColorStateList(R.styleable.TextView_textColor);
// 获取文字大小
mTextSize = typedArray.getDimensionPixelSize(R.styleable.TextView_textSize,mTextSize);
// 回收
typedArray.recycle();
}