1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 疯狂Android讲义(第3版)学习笔记(第二章---界面编程)

疯狂Android讲义(第3版)学习笔记(第二章---界面编程)

时间:2019-01-07 08:36:20

相关推荐

疯狂Android讲义(第3版)学习笔记(第二章---界面编程)

1,代码控制UI界面

一般我们的UI布局都是在xml文件中调整的,这里练习一下在activity中设置UI布局

import android.content.Context;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.TypedValue;import android.view.View;import android.view.ViewGroup;import android.widget.Button;import android.widget.LinearLayout;import android.widget.Toast;public class MainActivity extends AppCompatActivity implements View.OnClickListener {private Context mContext = MainActivity.this;private int mTenDp;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);LinearLayout linearLayout = new LinearLayout(mContext);setContentView(linearLayout);linearLayout.setOrientation(LinearLayout.VERTICAL);mTenDp = DensityUtil.dp2px(mContext, 10);// 转为dp单位linearLayout.setPadding(mTenDp *2, mTenDp, mTenDp *2, mTenDp);Button button = new Button(mContext);// 向线性布局中添加ViewlinearLayout.addView(button);// 设置Button在父布局中的显示方式button.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT));// 和布局中设置的@string/button的位置是一样的button.setText(R.string.button);// 转为sp单位button.setTextSize(PLEX_UNIT_SP , 18);button.setOnClickListener(this);}@Overridepublic void onClick(View view) {Toast.makeText(mContext, "HelloWorld!", Toast.LENGTH_SHORT).show();}}

2,自定义View之跟随手指移动的小球

简单练习了一个小球随手指移动的自定义控件的代码编写

//(View)DrawViewimport android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;/*** 自定义一个随手指不断移动的小球*/public class DrawView extends View{// 圆心坐标int circleX = 100;int circleY = 100;// 创建一个画笔Paint mPaint = new Paint();// 重写三个构造public DrawView(Context context) {this(context , null);}public DrawView(Context context, AttributeSet attrs) {this(context, attrs , 0);}public DrawView(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);// 画笔指定圆球颜色mPaint.setColor(Color.BLUE);// 画布指定圆心 半径和画笔canvas.drawCircle(circleX ,circleY , 100 , mPaint);}@Overridepublic boolean onTouchEvent(MotionEvent event) {// 获取目前触摸位置的x和y坐标circleX = (int) event.getX();circleY = (int) event.getY();// 通知当前组件重绘自己invalidate();// 返回true表示事件已处理return true;}}----------------------------------------------------------------------------------------//(layout)activity_main<LinearLayoutxmlns:android="/apk/res/android"xmlns:tools="/tools"android:id="@+id/activity_main"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context="com.test.drawview.MainActivity"><com.test.drawview.DrawViewandroid:layout_width="match_parent"android:layout_height="match_parent"/></LinearLayout>----------------------------------------------------------------------------------------// MainActivity import android.app.Activity;import android.os.Bundle;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}}

3,霓虹灯效果

熟悉帧布局是一层盖一层的;同一类控件做了同样的事情,可以考虑用数组的方式定义并初始化;更新UI必须在UI线程中进行

//(layout)activity_main<FrameLayoutxmlns:android="/apk/res/android"xmlns:tools="/tools"android:id="@+id/activity_main"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="com.test.framelayout.MainActivity"><TextViewandroid:id="@+id/red"android:layout_gravity="center"android:layout_width="350dp"android:layout_height="350dp"/><TextViewandroid:id="@+id/orange"android:layout_gravity="center"android:layout_width="300dp"android:layout_height="300dp"/><TextViewandroid:id="@+id/yellow"android:layout_gravity="center"android:layout_width="250dp"android:layout_height="250dp"/><TextViewandroid:id="@+id/green"android:layout_gravity="center"android:layout_width="200dp"android:layout_height="200dp"/><TextViewandroid:id="@+id/cyan"android:layout_gravity="center"android:layout_width="150dp"android:layout_height="150dp"/><TextViewandroid:id="@+id/blue"android:layout_gravity="center"android:layout_width="100dp"android:layout_height="100dp"/><TextViewandroid:id="@+id/purple"android:layout_gravity="center"android:layout_width="50dp"android:layout_height="50dp"/></FrameLayout>----------------------------------------------------------------------------------------//(value)colors<resources><color name="colorRed">#FF0000</color><color name="colorOrange">#FF8000</color><color name="colorYellow">#FFFF00</color><color name="colorGreen">#00FF00</color><color name="colorCyan">#00FFFF</color><color name="colorBlue">#0000FF</color><color name="colorPurple">#8000FF</color></resources>----------------------------------------------------------------------------------------//MainActivityimport android.os.Bundle;import android.os.Handler;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.widget.TextView;import java.util.Timer;import java.util.TimerTask;public class MainActivity extends AppCompatActivity {private static final int COLORCHANGE = 1;private int currentColor = 0;private TextView[] mTextViews;private Timer mTimer;private int[] mColors;private int[] mIds;private Handler mHandler = new Handler(){@Overridepublic void handleMessage(Message msg) {switch (msg.what){case COLORCHANGE:// 更改颜色for(int i = 0 ; i < mColors.length ; i++){mTextViews[i].setBackgroundResource(mColors[ (i + currentColor) % mColors.length]);}currentColor++;break;}super.handleMessage(msg);}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();initData();}public void initView(){mColors = new int[]{R.color.colorRed,R.color.colorOrange,R.color.colorYellow,R.color.colorGreen,R.color.colorCyan,R.color.colorBlue,R.color.colorPurple};mIds = new int[]{R.id.red,R.id.orange,R.id.yellow,R.id.green,R.id.cyan,R.id.blue,R.id.purple};mTextViews = new TextView[mColors.length];for (int i = 0; i < mColors.length ; i++){mTextViews[i] = (TextView) findViewById(mIds[i]);}}public void initData(){Timer timer = new Timer();// 三个参数含义:定时执行的任务/第一次多久后执行/每隔多久执行timer.schedule(new TimerTask() {@Overridepublic void run() {// 发送消息 让UI线程更改UImHandler.sendEmptyMessage(COLORCHANGE);}},0,100);}}

4,计算器布局界面

熟悉表格布局的表示形式

//(layout)activity_main<!--指定计算机的总体布局是6行4列--><GridLayoutxmlns:android="/apk/res/android"xmlns:tools="/tools"android:id="@+id/gridlayout"android:layout_width="match_parent"android:layout_height="match_parent"android:rowCount="6"android:columnCount="4"tools:context="com.test.gridlayout.MainActivity"><!-- TextView横跨4列 --><TextViewandroid:layout_width="match_parent"android:layout_height="100dp"android:layout_columnSpan="4"android:gravity="center_vertical"android:text="0"android:textSize="60sp"android:textColor="#000"android:background="#EEEEEE"android:paddingLeft="10dp"/><!-- Button横跨4列 --><Buttonandroid:layout_width="match_parent"android:layout_height="60dp"android:layout_columnSpan="4"android:text="清除"android:textSize="30sp"android:textColor="#000"/></GridLayout>----------------------------------------------------------------------------------------//MainActivityimport android.content.Context;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.Gravity;import android.widget.Button;import android.widget.GridLayout;public class MainActivity extends AppCompatActivity {private Context mContext = MainActivity.this;private GridLayout mGridLayout;private String[] mChars;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();initData();}public void initView(){mGridLayout = (GridLayout) findViewById(R.id.gridlayout);mChars = new String[]{"7" ,"8" ,"9" ,"÷" ,"4" ,"5" ,"6" ,"×" ,"1" ,"2" ,"3" ,"-" ,"." ,"0" ,"=" ,"+" };}public void initData(){for(int i = 0 ; i < mChars.length ; i++){Button button = new Button(mContext);// 循环设置文字内容button.setText(mChars[i]);button.setTextSize(50);// 循环按钮摆放位置// 在TextView和Button后指定Button所在的行GridLayout.Spec rowSpec = GridLayout.spec(i / 4 + 2);// 指定Button所在的列GridLayout.Spec columnSoec = GridLayout.spec(i % 4);GridLayout.LayoutParams layoutParams = new GridLayout.LayoutParams(rowSpec , columnSoec);// 左上及中间的形状不变,右下布局以填满GridLayout为宗旨layoutParams.setGravity(Gravity.FILL);mGridLayout.addView(button , layoutParams);}}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。