飞扬范文网
当前位置 首页 >范文大全 > 辞职报告 >

安卓实验报告

发布时间:2021-09-28 15:43:33 浏览数:

 实 验六、 布局管理器 一、实验目的及任务 1、掌握 Activity 中各种布局管理器(LinearLayout,TableLayout,RelativeLayout,FrameLayout,GridLayout)的使用 2、掌握各种布局管理器的嵌套。

 二、实验环境 1、Jdk 2、Eclipse 3、Android

 SDK 三、实验步骤 代码:

 package com.example.tuo2;

 import java.util.Calendar; import java.util.TimeZone;

 import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.drawable.BitmapDrawable; import android.os.Bundle; import android.os.Handler; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout;

 public class ClockActivity extends Activity {

  private final int FP = ViewGroup.LayoutParams.FILL_PARENT;

 private final int WC = ViewGroup.LayoutParams.WRAP_CONTENT;

  private QAnalogClock clock1;

  public void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  LinearLayout lLayout = new LinearLayout(this);

  lLayout.setLayoutParams(new LinearLayout.LayoutParams(FP, FP));

  lLayout.setOrientation(LinearLayout.VERTICAL);

 clock1 = new QAnalogClock(this, "GMT+8:00");

  lLayout.addView(clock1, new LinearLayout.LayoutParams(WC, WC));

 setContentView(lLayout);

 }

  class QAnalogClock extends View {

  Bitmap mBmpDial;

  Bitmap mBmpHour;

  Bitmap mBmpMinute;

  Bitmap mBmpSecond;

 BitmapDrawable bmdHour;

 BitmapDrawable bmdMinute;

  BitmapDrawable bmdSecond;

  BitmapDrawable bmdDial;

 Paint mPaint;

 Handler tickHandler;

 int mWidth;

  int mHeigh;

  int mTempWidth;

  int mTempHeigh;

  int centerX;

  int centerY;

 int availableWidth = 150;

  int availableHeight = 300;

 private String sTimeZoneString;

 public QAnalogClock(Context context, String sTime_Zone) {

 super(context);

 sTimeZoneString = sTime_Zone;

  mBmpHour = BitmapFactory.decodeResource(getResources(),

 R.drawable.android_clock_hour);

 bmdHour = new BitmapDrawable(mBmpHour);

  mBmpMinute = BitmapFactory.decodeResource(getResources(),

 R.drawable.android_clock_minute);

 bmdMinute = new BitmapDrawable(mBmpMinute);

  mBmpSecond = BitmapFactory.decodeResource(getResources(),

 R.drawable.android_clock_minute);

 bmdSecond = new BitmapDrawable(mBmpSecond);

  mBmpDial = BitmapFactory.decodeResource(getResources(),

 R.drawable.android_clock_dial);

 bmdDial = new BitmapDrawable(mBmpDial);

 mWidth = mBmpDial.getWidth();

 mHeigh = mBmpDial.getHeight();

 centerX = availableWidth;

 centerY = availableHeight / 2;

  mPaint = new Paint();

 mPaint.setColor(Color.RED);

 run();

  }

 public void run() {

 tickHandler = new Handler();

 tickHandler.post(tickRunnable);

  }

 private Runnable tickRunnable = new Runnable() {

 public void run() {

 postInvalidate();

  tickHandler.postDelayed(tickRunnable, 1000);

 }

  };

 protected void onDraw(Canvas canvas) {

 super.onDraw(canvas);

  Calendar cal = Calendar.getInstance(TimeZone

 .getTimeZone(sTimeZoneString));

 int hour = cal.get(Calendar.HOUR);

 int minute = cal.get(Calendar.MINUTE);

 int second = cal.get(Calendar.SECOND);

 float hourRotate = hour * 30.0f + minute / 60.0f * 30.0f;

 float minuteRotate = minute * 6.0f;

 float secondRotate = second * 6.0f;

  boolean scaled = false;

  if (availableWidth < mWidth || availableHeight < mHeigh) {

  scaled = true;

  float scale = Math.min((float) availableWidth / (float) mWidth,

  (float) availableHeight / (float) mHeigh);

  canvas.save();

  canvas.scale(scale, scale, centerX, centerY);

 }

  bmdDial.setBounds(centerX - (mWidth / 2), centerY - (mHeigh / 2),

 centerX + (mWidth / 2), centerY + (mHeigh / 2));

 bmdDial.draw(canvas);

  mTempWidth = bmdHour.getIntrinsicWidth();

 mTempHeigh = bmdHour.getIntrinsicHeight();

 canvas.save();

 canvas.rotate(hourRotate, centerX, centerY);

 bmdHour.setBounds(centerX - (mTempWidth / 2), centerY

 - (mTempHeigh / 2), centerX + (mTempWidth / 2), centerY

 + (mTempHeigh / 2));

 bmdHour.draw(canvas);

  canvas.restore();

  mTempWidth = bmdMinute.getIntrinsicWidth();

 mTempHeigh = bmdMinute.getIntrinsicHeight();

 canvas.save();

 canvas.rotate(minuteRotate, centerX, centerY);

 bmdMinute.setBounds(centerX - (mTempWidth / 2), centerY

 - (mTempHeigh / 2), centerX + (mTempWidth / 2), centerY

 + (mTempHeigh / 2));

  bmdMinute.draw(canvas);

  canvas.restore();

  mTempWidth = bmdSecond.getIntrinsicWidth();

 mTempHeigh = bmdSecond.getIntrinsicHeight();

 canvas.rotate(secondRotate, centerX, centerY);

 bmdSecond.setBounds(centerX - (mTempWidth / 2), centerY

 - (mTempHeigh / 2), centerX + (mTempWidth / 2), centerY

 + (mTempHeigh / 2));

 bmdSecond.draw(canvas);

  if (scaled) {

  canvas.restore();

 }

  }

 }

 } 实验结果:

 四.实验总结 实现时钟界面需要在 java 代码中做指针和表盘的布局,实现对指针的线程控制。

相关热词搜索: 实验 报告