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

0 0
原创粉丝点击