<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      如何自定義View及在配置文件中增加描述屬性

      自定義View的類必須繼承自View并且重寫onDraw(Canvas canvas)方法;
      增加自定義的屬性描述必須在values中增加attrs.xml來描述View的屬性;
      例如:
      <?xml version="1.0" encoding="UTF-8"?>
      <resources>
          <declare-styleable name="ClockView">
              <attr name="clockColor" format="color" />
              <attr name="visible" format="boolean"/>
              <attr name="timeZone" format="dimension">
                  <enum name="londan" value="0" />
                  <enum name="beijing" value="8" />
                  <enum name="newyork" value="20" />
              </attr>
          </declare-styleable>
      </resources>
      color,boolean,dimension,string為屬性的數(shù)據(jù)類型;
      在自定義的View中引用可以通過TypeArray來獲取,例如;
      TypedArray typedArray = context.obtainStyledAttributes(attrs,R.styleable.ClockView);
      int clockColor = typedArray.getColor(R.styleable.ClockView_clockColor, Color.WHITE);
      其中index的值為:R.styleable.組件名稱_屬性。
      在layout中的布局文件為
      <?xml version="1.0" encoding="utf-8"?>
      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:joydao="http://schemas.android.com/apk/res/net.joydao.clock"
          android:orientation="vertical" android:layout_width="fill_parent"
          android:layout_height="fill_parent">

       

          <net.joydao.clock.view.ClockView
              android:id="@+id/joydaoClock" android:layout_width="wrap_content"
              android:layout_height="wrap_content" joydao:clockColor="#ffffff"
              joydao:visible="false" joydao:timeZone="beijing" />

      </LinearLayout>
      下面給出完整的Clock例子:
      ClockView.java

      package net.joydao.clock.view;

      import java.text.DateFormat;
      import java.text.SimpleDateFormat;
      import java.util.Calendar;
      import java.util.Date;
      import java.util.TimeZone;

      import net.joydao.clock.R;
      import android.content.Context;
      import android.content.res.TypedArray;
      import android.graphics.Canvas;
      import android.graphics.Color;
      import android.graphics.Paint;
      import android.util.AttributeSet;
      import android.util.DisplayMetrics;
      import android.view.View;
      import android.view.WindowManager;

      public class ClockView extends View implements Runnable {
         
          private Paint colorCirclePaint;
          private Paint pointPaint;
          private Paint hourMarkPaint;
          private Paint minuteMarkPaint;
          private Paint secondNeedlePaint;
          private Paint minuteNeedlePaint;
          private Paint hourNeedlePaint;
          private Paint textPaint;
          private Paint timePaint;
          private float hourMarkLen;
          private float minuteMarkLen;
          private float clockCircle;
          private float radius;
          private float hourNeedleRadius;
          private float minuteNeedleRadius;
          private float secondNeedleRadius;
          private float cx;
          private float cy;
          private boolean running = false;
          private int mYear;
          private int mMonth;
          private int mDay;
          private int mHour;
          private int mMinute;
          private int mSecond;
          private int clockColor;
         
          public ClockView(Context context){
              this(context,null);
          }

          public ClockView(Context context, AttributeSet attrs) {
              super(context, attrs);
              TypedArray typedArray = context.obtainStyledAttributes(attrs,R.styleable.ClockView);
              clockColor = typedArray.getColor(R.styleable.ClockView_clockColor, Color.WHITE);
              typedArray.recycle();
              pointPaint = new Paint();
              pointPaint.setAntiAlias(true);
              pointPaint.setStyle(Paint.Style.STROKE);
             
              colorCirclePaint = new Paint();
              colorCirclePaint.setTextAlign(Paint.Align.CENTER);
              colorCirclePaint.setAntiAlias(true);
              colorCirclePaint.setStrokeWidth(clockCircle);
              colorCirclePaint.setStyle(Paint.Style.STROKE);
             
              hourMarkPaint = new Paint();
              hourMarkPaint.setTextAlign(Paint.Align.CENTER);
              hourMarkPaint.setAntiAlias(true);
              hourMarkPaint.setStyle(Paint.Style.STROKE);
             
              minuteMarkPaint = new Paint();
              minuteMarkPaint.setTextAlign(Paint.Align.CENTER);
              minuteMarkPaint.setAntiAlias(true);
              minuteMarkPaint.setStyle(Paint.Style.STROKE);
             
              secondNeedlePaint = new Paint();
              secondNeedlePaint.setTextAlign(Paint.Align.CENTER);
              secondNeedlePaint.setAntiAlias(true);
              secondNeedlePaint.setStyle(Paint.Style.STROKE);
             
              minuteNeedlePaint = new Paint();
              minuteNeedlePaint.setTextAlign(Paint.Align.CENTER);
              minuteNeedlePaint.setAntiAlias(true);
              minuteNeedlePaint.setStyle(Paint.Style.STROKE);
             
              hourNeedlePaint = new Paint();
              hourNeedlePaint.setTextAlign(Paint.Align.CENTER);
              hourNeedlePaint.setAntiAlias(true);
              hourNeedlePaint.setStyle(Paint.Style.STROKE);
             
              textPaint = new Paint();
              textPaint.setTextAlign(Paint.Align.CENTER);
              textPaint.setAntiAlias(true);
             
              timePaint = new Paint();
              timePaint.setTextAlign(Paint.Align.CENTER);
              timePaint.setAntiAlias(true);
              start();
          }
         
          public int getClockColor() {
              return clockColor;
          }

          public void setClockColor(int clockColor) {
              this.clockColor = clockColor;
              this.postInvalidate();
          }

          public void start(){
              running = true;
              new Thread(this).start();
          }
         
          public void stop(){
              running = false;
          }
         
          private void resetTime(){
              Calendar c = Calendar.getInstance(TimeZone.getDefault());
              c.setTime(new Date());
              mYear = c.get(Calendar.YEAR);
              mMonth = c.get(Calendar.MONTH)+1;
              mDay = c.get(Calendar.DAY_OF_MONTH);
              mHour = c.get(Calendar.HOUR_OF_DAY);
              mMinute = c.get(Calendar.MINUTE);
              mSecond = c.get(Calendar.SECOND);
          }
         
          @Override
          protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
              super.onMeasure(widthMeasureSpec, heightMeasureSpec);
          }

          @Override
          protected void onDraw(Canvas canvas) {
              super.onDraw(canvas);
              pointPaint.setColor(clockColor);
              colorCirclePaint.setColor(clockColor);
              hourMarkPaint.setColor(clockColor);
              minuteMarkPaint.setColor(clockColor);
              secondNeedlePaint.setColor(clockColor);
              minuteNeedlePaint.setColor(clockColor);
              hourNeedlePaint.setColor(clockColor);
              textPaint.setColor(clockColor);
              timePaint.setColor(clockColor);
              cx = getWidth()/2;
              cy = getHeight()/2;
              int tmp = getWidth()<=getHeight()?getWidth():getHeight();
              radius = tmp/2-2*clockCircle;
              hourMarkLen = radius/15;
              minuteMarkLen = radius/30;
              clockCircle = radius/60;
              pointPaint.setStrokeWidth(radius/25);
              textPaint.setTextSize(radius/8);
              timePaint.setTextSize(radius/5);
              hourMarkPaint.setStrokeWidth(radius/35);
              minuteMarkPaint.setStrokeWidth(radius/70);
              secondNeedlePaint.setStrokeWidth(radius/70);
              minuteNeedlePaint.setStrokeWidth(radius/35);
              hourNeedlePaint.setStrokeWidth(radius/20);
              hourNeedleRadius = radius - radius/2;
              minuteNeedleRadius = radius - radius/3;
              secondNeedleRadius = radius - radius/5;
              drawClockPanel(canvas,radius);
              drawNeedle(canvas);
              drawTime(canvas);
          }
         
          private void drawTime(Canvas canvas){
              DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
              DateFormat timeFormat = new SimpleDateFormat("hh:mm:ss a");
              String dateText = dateFormat.format(new Date());
              String timeText = timeFormat.format(new Date());
              float textX = cx;
              float timeY = cy+radius/2;
              float dateY = timeY+1.5f*textPaint.getTextSize();
              canvas.drawText(dateText, textX, dateY, textPaint);
              canvas.drawText(timeText, textX, timeY, timePaint);
          }
         
          private void drawClockPanel(Canvas canvas,float radius){   
              //System.out.println(getWidth()+":"+getHeight());
              //畫鐘的外圈
              canvas.drawCircle(cx, cy, radius, colorCirclePaint);
              //畫鐘的圓點(diǎn)
              canvas.drawCircle(cx, cy, radius/60, pointPaint);
              int hourLen = 12;
              int minLen = 60;
              for(int index = 0;index<hourLen;index++){
                  drawMark(canvas,index,cx,cy,radius,radius-hourMarkLen,(2*Math.PI/hourLen)*index+Math.PI/2,hourMarkPaint,true);
              }
              for(int index = 0;index<minLen;index++){
                  drawMark(canvas,index,cx,cy,radius,radius-minuteMarkLen,(2*Math.PI/minLen)*index+Math.PI/2,minuteMarkPaint,false);
              }
          }
         
          private void drawNeedle(Canvas canvas){
              double hourAngle = (2*Math.PI/12)*mHour+Math.PI/2+((2*Math.PI)/(12*60))*mMinute+((2*Math.PI)/(12*60*60))*mSecond;
              double minuteAngle = (2*Math.PI/(12*5))*mMinute+Math.PI/2+((2*Math.PI)/(12*5*60))*mSecond;
              double secondAngle = (2*Math.PI/60)*mSecond+Math.PI/2;
              drawNeedle(canvas,cx,cy,hourAngle,hourNeedleRadius,hourNeedlePaint);
              drawNeedle(canvas,cx,cy,minuteAngle,minuteNeedleRadius,minuteNeedlePaint);
              drawNeedle(canvas,cx,cy,secondAngle,secondNeedleRadius,secondNeedlePaint);
          }
         
          private void drawMark(Canvas canvas,int index,float cx,float cy,float r1,float r2,double angle,Paint paint,boolean drawNumber){
              float startX = (float)(cx-r2*Math.cos(angle));
              float startY = (float)(cy-r2*Math.sin(angle));
              float stopX = (float)(cx-r1*Math.cos(angle));
              float stopY = (float)(cy-r1*Math.sin(angle));
              float textSize = textPaint.getTextSize();
              float radiusText = r2 - textSize;
              if(index>=3 && index<=9){
                  radiusText = r2-textSize/3;
              }
              float textX = (float)(cx-radiusText*Math.cos(angle));
              float textY = (float)(cy-radiusText*Math.sin(angle));
              if(index == 3 || index == 9){
                  textY = textY + textSize/4;
              }
              canvas.drawLine(startX,startY,stopX,stopY, paint);
              if(drawNumber){
                  if(index==0){
                      index = 12;
                  }
                  canvas.drawText(String.valueOf(index), textX, textY, textPaint);
              }
          }
         
          private void drawNeedle(Canvas canvas,float cx,float cy,double angle,float radius,Paint paint){
              canvas.drawLine(cx, cy, (float)(cx-radius*Math.cos(angle)), (float)(cy-radius*Math.sin(angle)), paint);
          }

          public static Screen getScreenPix(Context context) {
              DisplayMetrics dm = new DisplayMetrics();
              WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
              windowManager.getDefaultDisplay().getMetrics(dm);
              return new Screen(dm.widthPixels,dm.heightPixels);
          }
         
          public static class Screen{
             
              public int widthPixels;
              public int heightPixels;
             
              public Screen(){
                 
              }
             
              public Screen(int widthPixels,int heightPixels){
                  this.widthPixels=widthPixels;
                  this.heightPixels=heightPixels;
              }

              @Override
              public String toString() {
                  return "("+widthPixels+","+heightPixels+")";
              }
             
          }

          @Override
          public void run() {
              while(running){
                  try {
                      resetTime();
                      postInvalidate();
                      Thread.sleep(1000);
                  } catch (InterruptedException e) {
                      e.printStackTrace();
                  }   
              }
          }

      }

      布局文件main.xml:

      <?xml version="1.0" encoding="utf-8"?>
      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:joydao="http://schemas.android.com/apk/res/net.joydao.clock"
          android:orientation="vertical" android:layout_width="fill_parent"
          android:layout_height="fill_parent">

          <net.joydao.clock.view.ClockView
              android:id="@+id/joydaoClock" android:layout_width="wrap_content"
              android:layout_height="wrap_content" joydao:clockColor="#ffffff"
              joydao:visible="false" joydao:timeZone="beijing" />

      </LinearLayout>

      屬性描述文件attrs.xml:

      <?xml version="1.0" encoding="UTF-8"?>
      <resources>
          <declare-styleable name="ClockView">
              <attr name="clockColor" format="color" />
              <attr name="visible" format="boolean"/>
              <attr name="timeZone" format="dimension">
                  <enum name="londan" value="0" />
                  <enum name="beijing" value="8" />
                  <enum name="newyork" value="20" />
              </attr>
          </declare-styleable>
      </resources>

      效果圖:

      posted @ 2010-08-20 11:58  ganzhijie  閱讀(719)  評(píng)論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 丰满多毛的大隂户视频| 少妇人妻偷人精品免费| 日韩人妻无码一区二区三区| 大尺度国产一区二区视频 | 国产jlzzjlzz视频免费看| 日韩免费无码视频一区二区三区 | 久久香蕉欧美精品| 久久精品国产免费观看频道| 国产在线自拍一区二区三区| 久久国产乱子精品免费女| 欧美大bbbb流白水| 色综合久久中文字幕综合网| 亚洲高潮喷水无码AV电影| 国产办公室秘书无码精品99| 国产精品人伦一区二区三| 欧洲性开放老太大| 欧美三级欧美成人高清| 奶头好大揉着好爽视频| 国产婷婷色一区二区三区| 久久综合伊人77777| 18禁视频一区二区三区| 精品福利视频一区二区三区| 91精品亚洲一区二区三区| 一本一道av中文字幕无码| 97人妻成人免费视频| 囯产精品久久久久久久久久妞妞| 手机看片日本在线观看视频| 国产国产午夜福利视频| 久久精品无码免费不卡| 97久久精品无码一区二区| 亚洲午夜成人精品电影在线观看| 五月婷婷久久中文字幕| 欧美精品日韩精品一卡| 无码专区 人妻系列 在线| 四虎永久在线高清免费看| 国产v综合v亚洲欧美大天堂| 国产日韩精品一区在线不卡| 国产一级区二级区三级区| 日韩人妻无码一区二区三区久久 | 免费观看全黄做爰大片| 中文字幕在线观看一区二区|