ID #58824

Android 自定义View

在values/attrs.xml中:

  < ?xml version="1.0" encoding="utf-8"?>

  < resources>

  < declare-styleable name="MyView">

  < attr name="textColor" format="color" />

  < attr name="textSize" format="dimension" />

  < attr name="imgBackground" format="integer" />

  < attr name="textPaddingLeft" format="dimension"/>

  < attr name="textPaddingTop" format="dimension"/>

  < /declare-styleable>

  < /resources>

  编写MyView.Java,继承View

  package test.cuntomizedview;

  import java.util.Calendar;

  import test.cuntomizedview.R;

  import Android.content.Context;

  import android.content.res.TypedArray;

  import android.graphics.Canvas;

  import android.graphics.Color;

  import android.graphics.Paint;

  import android.os.SystemClock;

  import android.util.AttributeSet;

  import android.view.View;

  public class MyView extends View {

  private Paint mPaint;

  private Context mContext;

  private String mStr;

  public MyView(Context context, AttributeSet attrs) {

  super(context, attrs);

  mContext = context;

  initMyView();

  TypedArray params = context.obtainStyledAttributes(attrs,

  R.styleable.MyView);

  int backgroudId = params.getResourceId(

  R.styleable.MyView_imgBackground, 0);

  if (backgroudId != 0)

  setBackgroundResource(backgroudId);

  int textColor = params.getColor(R.styleable.MyView_textColor,

  0XFFFFFFFF);

  setTextColor(textColor);

  float textSize = params.getDimension(R.styleable.MyView_textSize, 36);

  setTextSize(textSize);

  float paddingLeft = params.getDimension(

  R.styleable.MyView_textPaddingLeft, 41);

      float paddingTop = params.getDimension(

  R.styleable.MyView_textPaddingTop, 21);

  setPaddings(paddingLeft, paddingTop);

  }

  @Override

  protected void onDraw(Canvas canvas) {

  super.onDraw(canvas);

  if(mStr != null) {

  canvas.drawText(mStr, 0, 0, mPaint);

  }

  canvas.drawText("heiheihei", 30, 60, mPaint);

  }

  private void initMyView() {

  mPaint = new Paint();

  mPaint.setColor(Color.WHITE);

  }

  private void setTextColor(int textColor) {

  mPaint.setColor(0XFFAABBCC);

  }

  private void setTextSize(float textSize) {

  mPaint.setTextSize(textSize);

  }

  private void setPaddings(float paddingLeft, float paddingTop) {

  setPadding((int)paddingLeft, (int)paddingTop, 0, 0);

  }

  }

  // 注意怎样在attrs中怎样定义background并取得background。

  在layout中使用MyView,

  main.xml

  < ?xml version="1.0" encoding="utf-8"?>

  < LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

  xmlns:app="http://schemas.android.com/apk/res/test.cuntomizedview"

  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>