Android开发-前端视图Activity
来源:互联网 发布:kx tda200控制软件 编辑:程序博客网 时间:2024/06/05 16:40
Android开发-前端视图Activity
sf2gis@163.com
2016年1月11日增加GUI模型
1 目标:绘制界面,人机交互。
2 原理:调用硬件进行绘图。
3 流程:Activity作为程序界面的总体控制,XML和Res作为界面的静态设置。Window是实际的绘制者,View是绘制的内容,Fragment是可重用的Activity。
Activity读取XML进制绘制:将XML转化为Java类的属性,读取配置后创建Window。Window绘制各个View。
setContentView(R.layout.activity_main);
View的容器是ViewGroup(也是一个View),可以向其中添加View。
参考:http://cheng330301560.iteye.com/blog/1464678
http://www.cnblogs.com/manuosex/p/3231421.html
http://www.cnblogs.com/GnagWang/archive/2011/03/31/2001067.html
http://blog.csdn.net/chujidiy/article/details/7820451
4 方法:布局Layout,ViewGroup的子类,用于按规则盛放其它View。
参考:http://segmentfault.com/a/1190000002888109
http://www.cnblogs.com/chiao/archive/2011/08/24/2152435.html
4.1 线性布局LinearLayout:仅一行或一列,类似Swing中的FlowLayout,按顺序排放。
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/textView7"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true">
<Button
android:layout_width="56dp"
android:layout_height="wrap_content"
android:text="NewButton2"
android:id="@+id/button2"/>
<Button
android:layout_width="47dp"
android:layout_height="wrap_content"
android:text="NewButton6"
android:id="@+id/button6"
android:layout_gravity="center_vertical" />
<Button
android:layout_width="43dp"
android:layout_height="wrap_content"
android:text="NewButton5"
android:id="@+id/button5" />
<Button
android:layout_width="36dp"
android:layout_height="wrap_content"
android:text="NewButton4"
android:id="@+id/button4" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="NewButton3"
android:id="@+id/button3" />
</LinearLayout>
4.2 帧布局FrameLayout:将当前区域分为9个,但每个区只显示一个控件。类似Swing中的cardlayout。
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/textView7"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginTop="75dp">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="NewButton2"
android:id="@+id/button2"
android:layout_gravity="left|top" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="NewButton3"
android:id="@+id/button3"
android:layout_gravity="center_horizontal|top" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="NewButton4"
android:id="@+id/button4"
android:layout_gravity="center" />
<Button
android:layout_width="50dp"
android:layout_height="173dp"
android:text="NewButton5"
android:id="@+id/button5"
android:layout_gravity="left|top" />
</FrameLayout>
4.3 坐标布局CoordinateLayout:FrameLayout的子类,提供动态效果。
参考:http://my.oschina.net/kooeasy/blog/484593
http://www.2cto.com/kf/201506/409067.html
http://blog.csdn.net/xyz_lmn/article/details/48055919
4.4 相对布局RelativeLayout:父子控制决定位置。
<?xmlversion="1.0" encoding="utf-8"?>
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"
android:layout_height="match_parent"android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:showIn="@layout/activity_main"tools:context=".MainActivity">
<TextView android:text="HelloWorld!" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="LargeText"
android:id="@+id/textView6"
android:layout_below="@+id/textView"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="LargeText"
android:id="@+id/textView7"
android:layout_below="@+id/textView6"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="NewButton"
android:id="@+id/button2"
android:layout_below="@+id/textView7"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
</RelativeLayout>
4.5 绝对布局AbsoluteLayout:已弃用。类似Swing中的无布局。
参考:http://www.cnblogs.com/chiao/archive/2011/08/24/2152435.html
需要设置android:layout_x,android:layout_y进行定位。
<AbsoluteLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/absoluteLayout">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="NewButton3"
android:id="@+id/button3"
android:layout_x="0dp"
android:layout_y="50dp"/>
<Button
android:layout_width="202dp"
android:layout_height="wrap_content"
android:text="NewButton2"
android:id="@+id/button2"
android:layout_x="100dp"
android:layout_y="100dp"/>
</AbsoluteLayout>
4.6 表格布局TableLayout:表格,由TableRow组成。类似Swing中的GridLayout。
参考:http://www.cnblogs.com/over140/archive/2011/04/21/2023142.html
TableRow是LinearLayout的子类,专用于TableLayout的行,如果不在TableLayout中使用,作用于LinearLayout相同。
<TableLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/textView"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true">
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Button2"
android:id="@+id/button2"
android:layout_column="1" />
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="NewButton3"
android:id="@+id/button3"
android:layout_column="2" />
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="NewButton4"
android:id="@+id/button4"
android:layout_column="3" />
</TableRow>
</TableLayout>
4.7 网络布局GridLayout:升级版的TableLayout,比TableLayout更方便。
<GridLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/textView"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="NewButton2"
android:id="@+id/button2"
android:layout_row="0"
android:layout_column="0" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="NewButton3"
android:id="@+id/button3"
android:layout_row="1"
android:layout_column="1" />
</GridLayout>
5 方法:事件机制,回调函数、监听器、配置(推荐)
参考:http://wangxiaalwy.blog.163.com/blog/static/1552508182012113185422809/
http://www.2cto.com/kf/201302/190400.html
5.1 回调函数:每个类都有相应的回调函数,可以派生相关的类,然后重写回调函数。一般用于扩展控件的统一响应方法。
@Override
public booleanonCreateOptionsMenu(Menu menu) {
// Inflate the menu; this addsitems to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
5.2 监听器:与AWT完成相同。实现订阅机制的监听器接口。
参见:..\Java\JavaGUI-AWT.docx
//listener
Button btn2 =(Button)findViewById(R.id.button2);
btn2.setOnClickListener(newView.OnClickListener() {
@Override
public void onClick(View v) {
((TextView)findViewById(R.id.textView)).setText("Button2.clicked!");
System.out.println("btn2click.");
}
});
5.3 配置(推荐):注册在XML中的监听函数,在后台自动实现监听器,是监听器的简化形式。
//xml config
public void click3(View source){
((TextView)findViewById(R.id.textView)).setText("Button3.clicked!");
System.out.println("btn3click.");
}
5.4 示例
//activity_main.xml
<?xmlversion="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"
android:layout_height="match_parent"android:fitsSystemWindows="true"
tools:context=".MainActivity">
<android.support.design.widget.AppBarLayoutandroid:layout_height="wrap_content"
android:layout_width="match_parent"android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbarandroid:id="@+id/toolbar"
android:layout_width="match_parent"android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
<includelayout="@layout/content_main" />
<android.support.design.widget.FloatingActionButtonandroid:id="@+id/fab"
android:layout_width="wrap_content"android:layout_height="wrap_content"
android:layout_gravity="bottom|end"android:layout_margin="@dimen/fab_margin"
android:src="@android:drawable/ic_dialog_email" />
</android.support.design.widget.CoordinatorLayout>
//content_main.xml
<?xmlversion="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"
android:layout_height="match_parent"android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:showIn="@layout/activity_main"tools:context=".MainActivity">
<TextView android:text="HelloWorld!" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="NewButton"
android:id="@+id/button2"
android:layout_below="@+id/textView"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginTop="102dp" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="NewButton3"
android:id="@+id/button3"
android:layout_below="@+id/button2"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:onClick="click3"/>
</RelativeLayout>
//MainActivity.java
packagecom.lee.demo;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab =(FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(newView.OnClickListener() {
@Override
public void onClick(Viewview) {
Snackbar.make(view,"Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
//listener
Button btn2 =(Button)findViewById(R.id.button2);
btn2.setOnClickListener(newView.OnClickListener() {
@Override
public void onClick(View v) {
((TextView)findViewById(R.id.textView)).setText("Button2.clicked!");
System.out.println("btn2 click.");
}
});
}
//xml config
public void click3(View source){
((TextView)findViewById(R.id.textView)).setText("Button3.clicked!");
System.out.println("btn3click.");
}
@Override
public booleanonCreateOptionsMenu(Menu menu) {
// Inflate the menu; this addsitems to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main,menu);
return true;
}
@Override
public booleanonOptionsItemSelected(MenuItem item) {
// Handle action bar item clickshere. The action bar will
// automatically handle clicks onthe Home/Up button, so long
// as you specify a parentactivity in AndroidManifest.xml.
int id = item.getItemId();
//noinspectionSimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
returnsuper.onOptionsItemSelected(item);
}
}
6 方法:绘图
6.1 目标:在界面中绘制2D图形。
6.2 原理:Drawable调用系统底层GUI绘图,扩展View或Drawable完成绘制。
参见:Android开发.docx GUI模型。
6.3 流程:自定义View,创建View对象,设置参数,添加到主界面。
参考:http://blog.csdn.net/fancylovejava/article/details/17285987
6.3.1自定义View:继承View,重写OnDraw()。在onDraw()中绘制图形。
public classMyView extends View {
public MyView(Context context) {
super(context);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//创建笔刷
Paint mPaint=new Paint();
mPaint.setColor(0xFFFF0000);//Color
mPaint.setStrokeWidth(12);//width
canvas.drawLine(0,0,100,100,mPaint);//line
canvas.drawOval(100,0,200,100,mPaint);//oval
}
}
6.3.2创建View对象
MyViewv=new MyView(this);
6.3.3设置参数:设置在父容器布局中的参数。
RelativeLayout layout=(RelativeLayout)findViewById(R.id.rlayout);
RelativeLayout.LayoutParams param= new RelativeLayout.LayoutParams(ActionBar.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT);
param.addRule(RelativeLayout.BELOW,R.id.button3);
param.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
param.addRule(RelativeLayout.ALIGN_PARENT_START);
6.3.4添加到主界面:将view对象和参数一起设置到addView()中。
layout.addView(v,param);
6.3.5示例
//activity_main.xml
<?xmlversion="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"
android:layout_height="match_parent"android:fitsSystemWindows="true"
tools:context=".MainActivity">
<android.support.design.widget.AppBarLayoutandroid:layout_height="wrap_content"
android:layout_width="match_parent"android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbarandroid:id="@+id/toolbar"
android:layout_width="match_parent"android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
<include layout="@layout/content_main"/>
<android.support.design.widget.FloatingActionButtonandroid:id="@+id/fab"
android:layout_width="wrap_content"android:layout_height="wrap_content"
android:layout_gravity="bottom|end"android:layout_margin="@dimen/fab_margin"
android:src="@android:drawable/ic_dialog_email" />
</android.support.design.widget.CoordinatorLayout>
//content_main.xml
<?xmlversion="1.0" encoding="utf-8"?>
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"
android:layout_height="match_parent"android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:showIn="@layout/activity_main"tools:context=".MainActivity"
android:id="@+id/rlayout">
<TextView android:text="HelloWorld!" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="NewButton"
android:id="@+id/button2"
android:layout_below="@+id/textView"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginTop="102dp" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="NewButton3"
android:id="@+id/button3"
android:layout_below="@+id/button2"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:onClick="click3"/>
</RelativeLayout>
//MainActivity.java
packagecom.lee.demo;
import android.app.ActionBar;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.view.ViewGroup;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.util.Log;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab =(FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(newView.OnClickListener() {
@Override
public void onClick(Viewview) {
Snackbar.make(view,"Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
}
//xml config
public voidclick3(View source){
((TextView)findViewById(R.id.textView)).setText("Button3.clicked!");
MyViewv=new MyView(this);
RelativeLayoutlayout=(RelativeLayout)findViewById(R.id.rlayout);
RelativeLayout.LayoutParamsparam= new RelativeLayout.LayoutParams(ActionBar.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT);
param.addRule(RelativeLayout.BELOW,R.id.button3);
param.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
param.addRule(RelativeLayout.ALIGN_PARENT_START);
layout.addView(v,param);
Log.i("btn3","clicked.");
}
@Override
public booleanonCreateOptionsMenu(Menu menu) {
// Inflate the menu; this addsitems to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItemitem) {
// Handle action bar item clickshere. The action bar will
// automatically handle clicks onthe Home/Up button, so long
// as you specify a parentactivity in AndroidManifest.xml.
int id = item.getItemId();
//noinspectionSimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
returnsuper.onOptionsItemSelected(item);
}
}
//MyView.java
packagecom.lee.demo;
import android.content.Context;
import android.graphics.Canvas;
import android.view.View;
import android.graphics.Paint;
/**
* Created by sf2gis@163.com on 2016/1/6.
*/
public class MyViewextends View {
public MyView(Context context) {
super(context);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//创建笔刷
Paint mPaint=new Paint();
mPaint.setColor(0xFFFF0000);//Color
mPaint.setStrokeWidth(12);//width
canvas.drawLine(0,0,100,100,mPaint);//line
canvas.drawOval(100,0,200,100,mPaint);//oval
}
}
6.4 方法:画笔Paint,画布Canvas。
6.4.1画笔Paint:设置画笔的颜色、粗细、填充等。
颜色默认使用ARGB的十六进制表示。
6.4.2画布Canvas:画笔操作的对象,可以绘制直线、圆等各种形状。
public void click3(View source){
((TextView)findViewById(R.id.textView)).setText("Button3.clicked!");
Bitmap bmp = Bitmap.createBitmap(200,100,Bitmap.Config.ARGB_8888);
Canvas canvas= new Canvas(bmp);
Paint mPaint=new Paint();
mPaint.setColor(0xFF00FF00);//Color
mPaint.setStrokeWidth(12);//width
canvas.drawLine(0, 0, 100, 100,mPaint);//line
canvas.drawOval(100, 0, 200, 100,mPaint);//oval
ImageView imageView =(ImageView)findViewById(R.id.imageView);
imageView.setImageBitmap(bmp);
Log.i("btn3","clicked.");
}
6.4.3多线程绘制SurfaceView。
SurfaceView能够在主线程外绘图,从而降低主线程的压力。
6.5 示例:使用ImageView双缓冲绘制图形
将要显示的内容绘制大Bitmap中,然后将Bitmap显示在ImageView实现双缓冲。
//activity_main.xml
<?xmlversion="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"
android:layout_height="match_parent" android:fitsSystemWindows="true"
tools:context=".MainActivity">
<android.support.design.widget.AppBarLayoutandroid:layout_height="wrap_content"
android:layout_width="match_parent"android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbarandroid:id="@+id/toolbar"
android:layout_width="match_parent"android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
<includelayout="@layout/content_main" />
<android.support.design.widget.FloatingActionButtonandroid:id="@+id/fab"
android:layout_width="wrap_content"android:layout_height="wrap_content"
android:layout_gravity="bottom|end"android:layout_margin="@dimen/fab_margin"
android:src="@android:drawable/ic_dialog_email" />
</android.support.design.widget.CoordinatorLayout>
//content_main.xml
<?xmlversion="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:showIn="@layout/activity_main"tools:context=".MainActivity"
android:id="@+id/rlayout">
<TextView android:text="HelloWorld!" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Show"
android:id="@+id/button2"
android:layout_below="@+id/textView"
android:layout_alignParentStart="true"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="NewButton3"
android:id="@+id/button3"
android:onClick="click3"
android:layout_alignTop="@+id/button2"
android:layout_centerHorizontal="true"
android:background="@android:drawable/ic_menu_zoom" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="This isTextView"
android:id="@+id/textView6"
android:layout_below="@+id/button2"
android:layout_alignEnd="@+id/button3" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageView"
android:layout_below="@+id/textView6"
android:layout_alignParentStart="true" />
</RelativeLayout>
//MainActivity.java
packagecom.lee.demo;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ImageView;
import android.widget.TextView;
import android.util.Log;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab =(FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(newView.OnClickListener() {
@Override
public void onClick(Viewview) {
Snackbar.make(view,"Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
}
//xml config
public void click3(View source){
((TextView)findViewById(R.id.textView)).setText("Button3.clicked!");
Bitmap bmp = Bitmap.createBitmap(200,100,Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bmp);
Paint mPaint=new Paint();
mPaint.setColor(0xFF00FF00);//Color
mPaint.setStrokeWidth(12);//width
canvas.drawLine(0, 0, 100, 100,mPaint);//line
canvas.drawOval(100, 0, 200, 100,mPaint);//oval
ImageView imageView =(ImageView)findViewById(R.id.imageView);
imageView.setImageBitmap(bmp);
Log.i("btn3","clicked.");
}
@Override
public booleanonCreateOptionsMenu(Menu menu) {
// Inflate the menu; this addsitems to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public booleanonOptionsItemSelected(MenuItem item) {
// Handle action bar item clickshere. The action bar will
// automatically handle clicks onthe Home/Up button, so long
// as you specify a parentactivity in AndroidManifest.xml.
int id = item.getItemId();
//noinspectionSimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
returnsuper.onOptionsItemSelected(item);
}
}
7 方法:通信Intent
参见:Android开发-前后端控制器intent.docx
- Android开发-前端视图Activity
- Android前端开发随笔
- Android Activity简介和自定义视图
- Android的Activity视图层级分析
- Android开发9:Activity
- Android开发笔记: Activity
- Android开发 - Activity初步
- Android开发之-Activity
- Android开发-新建Activity
- Android开发之Activity
- android开发之activity
- Android开发 - Activity生命周期
- Android开发--Activity
- android开发------初识Activity
- android开发------Activity生命周期
- Android开发-Activity
- android开发 - Activity生命周期
- Android开发之activity
- JavaSE入门学习1:计算机基础知识
- 算法与数据结构学习资源大搜罗——良心推荐
- PHP八大安全函数解析
- LD-LINUX.SO.2: BAD ELF INTERPRETER的解决办法【阿里云】
- Block块/Swift闭包介绍与使用
- Android开发-前端视图Activity
- 算法--排序(希尔,归并)
- 【第十二章】零配置 之 12.5 综合示例-积分商城 ——跟我学spring3
- 提高VBA程序效率的技巧
- Oracle 日常巡检
- 2016【太原网络营销师】郭文军讲解如何优化网站长尾关键词
- PHP 程序员解决问题能力的八个级别
- Android开发-前后端控制器intent
- 配置Oracle Gateway 12连接到SQL server 2014