CreateNewProject

  1. 下载Android SDK
  2. 创建项目,选择Android,选择Empty Activity,其他默认

Component

Components

  1. EditText,文本编辑框组件

    • android:hint="QQ号/微信号" —— 显示的默认文字
  1. <EditText
  2. android:layout_width="match_parent"
  3. android:layout_height="wrap_content"
  4. android:padding="10dp"
  5. android:hint="QQ号/微信号" />
  1. + `android:drawableLeft="@mipmap/building"` ---- 在输入框的左边显示小图片
  2. + `android:drawablePadding="5dp"` ---- 设置图片和输入框的间距
  3. + `android:lines="5"` --- 设置一边编辑框的最大行数
  1. TextView —— 文本框组件

    • android:maxWidth="210dp" —— 设置最大宽度
    • drawableLeft —— 同上
  2. ImageButton 图片按钮,没有Text属性

    • src属性添加背景图片,background属性更改背景颜色…
  3. RadioButton 单选按钮
  4. RadioGroup 单选按钮组 ,,将一组RadioButton括起来

    • 获取已点击按钮的值
  1. RadioGroup rg = findViewById(R.id.radiogroup1);
  2. rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
  3. @Override
  4. public void onCheckedChanged(RadioGroup radioGroup, int i) {
  5. // i 为被选中的按钮的id号
  6. RadioButton t = findViewById(i);
  7. Toast.makeText(RelativeActivity.this,"You feel "+t.getText()+"!", Toast.LENGTH_SHORT).show();
  8. }
  9. });
  1. CheckBox 复选框,多个的话,直接写多个就可以了,不需要括起来
  2. DatePicker 日期选择器
  3. TimePicker 时间选择器
  1. tp.setIs24HourView(true); // 设置为24制
  1. Chronometer 计时器
  2. ProgressBar 进度条

    • 设置 style 属性可更改进度条的样式

      • ?android:attr/progressBarStyleHorizontal —— 水平细进度条
      • ?android:attr/progressBarStyleSmall —— 旋转小进度条
      • ?android:attr/progressBarStyleLarge —— 旋转大进度条
      • @android:style/Widget.ProgressBar —— 另一种样式 灰色圆形进度条
      • @android:style/Widget.ProgressBar.Horizontal ——- 灰色水平
      • @android:style/Widget.ProgressBar.Small —— 圆形小灰色
  3. SeekBar 拖动条

    • android:thumb="@mipmap/hua" —— 设置拖动点为一张图片
  4. RatingBar —— 星星评分条

    • android:isIndicator="true" —— 设置为不可改变
    • android:numStars="6" —— 设置星星的数量
  1. // 获取已选的星星的数量
  2. float rating = rb.getRating();
  1. ImageView 图像视图

    • 默认XY等比例缩放,,设置android:scaleType="fitXY" XY分别缩放
    • android:adjustViewBounds="true" —— 设置了这个之后,可以设置图片的最大宽度、最大高度

      • android:maxWidth="60dp" android:maxHeight="60dp"
    • android:tint="#cccc" —— 图片着色
  2. ImageSwitcher 图像切换器
  3. GridView —— 网格组件

    • 使用适配器来控制显示内容
    • android:numColumns="3" —— 设置列数
    • android:verticalSpacing="5dp" android:horizontalSpacing="5dp" —— 设置行列间隔
  4. Spinner 下拉列表

    • android:entries="@array/ctype" —— 配置子元素,需要在values下创建一个xml文件,ctype为名字
  5. ListView 列表视图

    • android:entries="@array/ctype" —- 配置子元素,同上
    • SpinnerListView都可以利用适配器来配置子元素。
  6. 滚动条组件:

    • ScrollView 垂直滚动条,超出的内容可以由上下滚动来显示
    • HorizontalScrollView 水平滚动条
    • 滚动条组件内部只能含有一个直接儿子组件,当有多个内容的时候需要用Layout组件括起来
  7. ViewFlipper —— 页面/图片滚动

    • 不过不知怎的不能通过他的id来获取它

Common_attribute

  1. id: android:id="@+id/gridlayout"
  2. 宽度:android:layout_width="match_parent"

    • match_parent 与父容器相同
    • wrap_content 包裹自身的内容
  3. 高度:android:layout_height="match_parent"
  4. 文本:android:text="@string/app_name"

    • @string/xx需要在res/values/string.xml里面设置值
  5. 文本文字大小:android:textSize="24sp"
  6. 背景:android:background="@mipmap/psb"

    • @mipmap/xxres/mipmap下面的图片资源
    • 背景颜色:android:background="#ccc"
  7. 内边距:android:paddingBottom="20dp" android:paddingStart="20dp" android:paddingLeft="20dp" android:paddingRight="20dp" or
    android:padding="20dp"
  8. 外边距:android:layout_margin="@android:dimen/app_icon_size" or
    android:layout_marginLeft="100dp" android:layout_marginStart="100dp" android:layout_marginBottom="100dp" android:layout_marginEnd="100dp"等等
  9. 参照定位位置:app:layout_constraintLeft_toLeftOf="parent" ——参照是父组件

    • app:layout_constraintTop_toBottomOf="@+id/hanata"+android:layout_marginTop="12dp",,参照点的id为hanata的组件的底部,且向上间隔12dp
    • 当外围使用的是RelativeLayoutConstraintLayout时,内部的子组件才有这个属性
    • android:layout_below="@+id/textView1" —— 在这个组件的下面
  10. 布局管理器设置子组件的位置: android:gravity="right|bottom" (部分试用)

View

  1. view是界面的组成部分
  2. UI组件的层次结构
  1. ViewGroup ---View
  2. |--View
  3. |--ViewGroup --- View
  4. |-- View
  1. 控制UI界面的方式

    • 使用Xml文件
    • 使用Java文件
    • 混合使用Xml与Java文件来控制
    • 开发自定义的View

子类TextView

ViewGroup

  1. 用于容纳其他组件

ViewGroup.LayoutParams
设置布局的高度和宽度等属性

  1. ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(60,40);

ViewGroup.MarginLayoutParams
设置外边距大小

ConstraintLayout

  1. 约束布局管理器, 网友讲解

FrameLayout

  1. 帧布局管理器,可用于显示层叠的内容,并且可以拖动
  2. android:foreground="@mipmap/man" —— 设置前景图像,始终位于最上层
  3. android:foregroundGravity="bottom" —— 设置前景图像的上下左右位置

GridLayout

  1. 网格布局管理器
  2. 排列方向:

    • 水平方向:android:orientation="horizontal"
  3. 行数、列数:
    android:rowCount="2"
    android:columnCount="4"
  4. 子组件:android:layout_row="0" android:layout_column="2" —— 在第几列第几行

    • android:layout_colunmSpan="2" —— 跨几列
    • android:layout_rowSpan="2" —— 跨几行
    • android:layout_gravity="center" —— 在表格的位置

RelativeLayout

  1. 相对布局管理器
  2. android:gravity="center" —— 可以设置子组件为居中显示

    • android:ignoreGravity="@android:id/button1"—— 使id为这个的子组件不受gravity影响
  3. android:layout_centerInParent="true" —— 子组件在父组件的正中间

LinearLayout

  1. 线性布局管理器,将其中的组件按照水平或垂直的方式排列

    • 水平方向:android:orientation="horizontal"
    • 垂直方向:android:orientation="vertical"
  2. 设置子组件:android:gravity="right|bottom"
  3. 子组件属性: android:layout_weight —— 子组件占父组件剩余空间的比例

    • 剩余空间是 除了已有组件所占的空间之外的地方

TableLayout

  1. 表格布局管理器
  2. android:collapseColumns="1"—— 使第几列被隐藏
  3. android:stretchColumns="0" —— 允许第几列自动填充剩余的空间
  4. android:shrinkColumns="3" —— 当内容超出屏幕范围时,使某一列自动缩小,以便让其他内容显示出来
  5. 使用TableRow来控制表格的行

TabHost

  1. 标签页,选项卡,可以左右切换的控制器
  2. 设置固定id android:id="@android:id/tabhost"
  3. 包含:id似乎都是固定这样的
  1. <LinearLayout
  2. android:layout_width="match_parent"
  3. android:layout_height="match_parent"
  4. android:orientation="vertical">
  5. <TabWidget
  6. android:layout_width="match_parent"
  7. android:layout_height="wrap_content"
  8. android:id="@android:id/tabs"></TabWidget>
  9. <FrameLayout
  10. android:layout_width="match_parent"
  11. android:layout_height="match_parent"
  12. android:id="@android:id/tabcontent">
  13. </FrameLayout>
  14. </LinearLayout>
  1. 需自定义两个供使用的xml文件,表示每个选项卡里面的内容
  2. 在Java文件里面配置选项卡

Fragment

  1. 不论是在xml文件里面添加还是使用Java文件添加Fragment,都出错,但是项目和老师的不一样,所以以后再改 —— id !!
  2. 至少三个文件

    • 使用fragment的主文件
  1. <fragment
  2. android:id="@+id/frag"
  3. android:layout_width="match_parent" android:layout_height="wrap_content"
  4. android:name="com.example.andriodapp.FragmentTest"
  5. app:layout_constraintLeft_toLeftOf="parent"
  6. app:layout_constraintTop_toTopOf="parent"
  7. tools:layout="@layout/activity_hana"
  8. android:layout_marginTop="200dp"/>
  1. + `fragment`的布局文件,一般布局
  2. + `java`文件
  1. public class FragmentTest extends Fragment {
  2. @Nullable
  3. @Override
  4. public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
  5. View view = View.inflate(getContext(), R.layout.activity_hana, null);
  6. return view;
  7. }
  8. }

intent

  1. intent种类:

    • 显式:Intent intent = new Intent(Activity1.this, Activity2.class);
    • 隐式,,不需要用到目标组件的名称
  2. 属性

    • Component
    • Action
    • Data
    • Category
    • intent-filter,过滤器

Event

物理按键

  1. 物理按键事件

    • onKeyDown()
    • onKeyUp()
    • onKeyLongPress()
    • setOnLongClickListener —— 长按事件的事件监听器
    • setOnTouchListener —— 触摸事件的事件监听器
  2. 各个物理按键所表示的常量

    • 音量键 —— KEYCODE_VOLUME_UP..KEYCODE_VOLUME_DOWN
    • 电源键 —— KEYCODE_POWER
    • 返回键 —— KEYCODE_BACK
    • 主屏键 —— KEYCODE_HOME
    • 菜单键 —— KEYCODE_MENU

Java_Event

  1. GridLayout layout = findViewById(R.id.gridlayout);—— 从界面中找出ID为这个的组件
  2. frameLayout.setBackgroundResource(R.mipmap.psb);—— 设置背景图片
  3. TextView textView = new TextView(this);—— 定义TextView组件
  4. frameLayout.addView(textView);—— 加入组件到Layout中
  5. 使用 Log 类来输出日志信息

    • Log.i() - 普通信息
    • Log.d() - 调试日志
    • Log.v() - 冗余日志
    • Log.e() - 错误日志
    • Log.w() - 警告日志
  1. static String TAG = "MainActivity";
  2. Log.e(TAG, "错误信息");
  3. Log.i(TAG, "普通信息");
  4. Log.d(TAG, "调试信息");
  5. Log.v(TAG, "荣誉信息");
  1. text.setText(getResources().getString(R.string.name)) —— 在Java文件里面为Text指定strings.xml的资源
  2. text2.setTextColor(ContextCompat.getColor(MainActivity.this,R.color.colorAccent)) —— 在Java文件里面更改text的文字颜色
  3. text.setTextSize(getResources().getDimension(R.dimen.text)) —— 在Java文件里面更改text的文字尺寸
  4. String [] arr = getResources().getStringArray(R.array.listitem) —— 获取字符串资源
  5. drawable文件夹里新建一个drawable文件,名为edittext_focused,指定元素得到焦点、失去焦点的样式
  1. <item android:state_focused="true" android:color="#111"/>
  2. <item android:state_focused="false" android:color="#aaa"/>
  3. // TextView引用
  4. android:textColor="@drawable/edittext_focused"
  1. 在一个继承自View的类中, 绘制一个矩形
  1. protected void onDraw(Canvas canvas) {
  2. super.onDraw(canvas);
  3. // 定义画笔
  4. Paint paint = new Paint();
  5. paint.setColor(0xaaff6622); // 设置画笔的颜色
  6. paint.setStyle(Paint.Style.FILL); // 填充样式
  7. // 绘制矩形
  8. canvas.drawRect(10,10,280,150,paint);
  9. }
  1. new DrawView(this); //定义这个矩形 添加在页面中
  1. 绘制动画

    • 逐帧动画,使用一串连续的图片,播放 产生动画效果。。在drawable下新建一个xml文件,例如取名为fariy.xml
  1. <animation-list xmlns:android="http://schemas.android.com/apk/res/android">
  2. <item android:drawable="@drawable/run1" android:duration="60"/>
  3. <item android:drawable="@drawable/run2" android:duration="60"/>
  4. <item android:drawable="@drawable/run3" android:duration="60"/>
  5. <item android:drawable="@drawable/run4" android:duration="60"/>
  6. </animation-list>

// 使用

  1. android:background="@drawable/fariy"

// 播放 暂停

  1. Button btn = findViewById(R.id.btn);
  2. final AnimationDrawable anim = (AnimationDrawable)btn.getBackground();
  3. anim.start();
  4. anim.stop();
  1. + 补间动画, 设置起始和终止的值,由系统自动完成中间值的计算和显示
  2. * 透明度的变化
  3. * 旋转动画
  4. * 位置的变化
  5. * ...
  1. 音频播放 MediaPlayer

    • 加载音频文件的方法

      • create()
      • setDataSoucre()
  1. MediaPlayer mediaPlayer = MediaPlayer.create(this,R.raw.safeandsound);
  2. mediaPlayer.play(); // 播放
  3. .pause(); // 暂停
  4. try { // 停止
  5. mediaPlayer.stop();
  6. mediaPlayer.prepare();
  7. mediaPlayer.seekTo(0);
  8. } catch(IOException e) {
  9. e.printStackTrace();
  10. }
  11. // 销毁
  12. protected void onDestroy() {
  13. super.onDestroy();
  14. if(mediaPlayer.isPlaying()){
  15. mediaPlayer.stop();
  16. }
  17. mediaPlayer.release(); // 释放资源
  18. }
  1. 播放短小的音频 SoundPool
  2. 播放视频 VideoView or MediaPlayer+SerfaceView

    • 都在SD卡上面的视频…

进程与线程

  1. 子线程不能更改主线程的组件
  2. 线程 - Looper - MessageQueue
  3. handler 通过 message 向 MessageQueue 发送消息
  1. final int FLAG_MSG = 0x001;
  2. private Message message; // 声明消息对象
  1. // 定义
  2. Message message = Message.obtain();
  3. message.what = FLAG_MSG; // 设置消息说包含的内容 为自定义的一个int型值
  4. handler.sendMessage(message); // 发送消息
  1. Handler handler = new Handler(){
  2. @Override
  3. public void handleMessage(Message msg) {
  4. super.handleMessage(msg);
  5. if(msg.what == FLAG_MSG){
  6. /*** 处理事务 ***/
  7. message = handler.obtainMessage(FLAG_MSG); // 获取message
  8. handler.sendMessageDelayed(message, 3000); // 延迟3秒发送消息
  9. }
  10. }
  11. };
  1. xx
  1. final Handler handler = new Handler(){
  2. @Override
  3. public void handleMessage( Message msg) {
  4. super.handleMessage(msg);
  5. // 判断接收的消息是否是自己定义的那个
  6. if(msg.what == 0x001){
  7. /** 处理事务 **/
  8. }
  9. }
  10. };
  11. Thread thread = new Thread(new Runnable() {
  12. @Override
  13. public void run() {
  14. handler.sendEmptyMessage(0x001); // 发送空消息
  15. }
  16. });
  17. thread.start(); // 开启线程

Service

  1. 按照启动方式 分类:

    • Started Service
    • Bound Service
  2. 搞不懂…

location

  1. 有3中locationProvider

    • passive
    • gps
    • network

other

  1. 在一个布局文件中,最多只能有一个根布局管理器,如果有多个 需要使用一个根布局管理器将他们括起来。
  2. 根布局管理器必须包含xmlns属性
  3. 自定义圆角矩形,在drawable文件夹下面新建一个xml文件,比如这个shapeRadius.xml
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <shape xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:shape="rectangle">
  4. <solid android:color="#1ffa03"/>
  5. <corners android:radius="30dp"/>
  6. <padding android:bottom="10dp"
  7. android:left="15dp"
  8. android:right="15dp"
  9. android:top="10dp"/>
  10. </shape>

使用该形状,添加在按钮的属性里面

  1. android:background="@drawable/shapeRadius"
  1. values/styles里面定义主题样式、样式

    • AndroidManifest里面设置主题样式,可以是全局的,也可以是单个Activity
    • 在java文件里面,onCreate()方法里,用setTheme(R.style.myTheme)来设置样式
    • style="@style/title" —— 组件使用样式
    • 样式可以继承,使用parent指定
  1. <style name="title" parent="继承哪个样式">
  2. <item name="android:textSize">30sp</item>
  3. <item name="android:textColor">#06f</item>
  4. </style>
  1. 选项菜单 —— 在res下创建menu文件夹,新建Menu Resources file,添加元素
  1. <item android:id="fankui" android:title="反馈"></item>
  1. 在Java文件里面显示/隐藏Action Bar
  1. final ActionBar ab = getSupportActionBar();
  2. ab.show();
  3. ab.hide();
  1. 弹出对话框

    • 简单的确定/取消对话框
  1. AlertDialog alertDialog = new AlertDialog.Builder(RelativeActivity.this).create();
  2. alertDialog.setIcon(R.mipmap.building);
  3. alertDialog.setTitle("GAME:");
  4. alertDialog.setMessage("it's time to have a game");
  5. alertDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "NO", new DialogInterface.OnClickListener() {
  6. @Override
  7. public void onClick(DialogInterface dialogInterface, int i) {
  8. Toast.makeText(RelativeActivity.this, "ok.", Toast.LENGTH_SHORT).show();
  9. }
  10. });
  11. alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, "YES", new DialogInterface.OnClickListener() {
  12. @Override
  13. public void onClick(DialogInterface dialogInterface, int i) {
  14. Toast.makeText(RelativeActivity.this, "ok!!!", Toast.LENGTH_SHORT).show();
  15. }
  16. });
  17. alertDialog.show();
  1. + 有简单列表的对话框
  1. final String[] items = new String[] {
  2. "have an apple a day, keep doctor away.", "have a nice day",
  3. "^O^","O.O"
  4. };
  5. AlertDialog.Builder alertDialog = new AlertDialog.Builder(RelativeActivity.this);
  6. alertDialog.setIcon(R.mipmap.building);
  7. alertDialog.setTitle("pick one");
  8. alertDialog.setItems(items, new DialogInterface.OnClickListener() {
  9. @Override
  10. public void onClick(DialogInterface dialogInterface, int i) {
  11. Toast.makeText(RelativeActivity.this, "OK!!You picked "+items[i], Toast.LENGTH_SHORT).show();
  12. }
  13. });
  14. alertDialog.create().show();
  1. + 单项选择的对话框
  1. final String[] items = new String[] {
  2. "have an apple a day, keep doctor away.", "have a nice day",
  3. "^0^","O.O"
  4. };
  5. AlertDialog.Builder alertDialog = new AlertDialog.Builder(RelativeActivity.this);
  6. alertDialog.setIcon(R.mipmap.building);
  7. alertDialog.setTitle("pick one");
  8. alertDialog.setSingleChoiceItems(items, 0, new DialogInterface.OnClickListener() {
  9. @Override
  10. public void onClick(DialogInterface dialogInterface, int i) {
  11. Toast.makeText(RelativeActivity.this, "you picked "+items[i], Toast.LENGTH_SHORT).show();
  12. }
  13. });
  14. alertDialog.setNegativeButton("cancel", null);
  15. alertDialog.setPositiveButton("OK", null);
  16. alertDialog.create().show();
  1. + 多项选择对话框
  1. // 表示每个元素被选择的状态
  2. final boolean [] checked = new boolean[] {true, false, false, true};
  3. final String[] items = new String[] {
  4. "have an apple a day, keep doctor away.", "have a nice day",
  5. "^0^","O.O"
  6. };
  7. AlertDialog.Builder alertDialog = new AlertDialog.Builder(RelativeActivity.this);
  8. alertDialog.setIcon(R.mipmap.building);
  9. alertDialog.setTitle("pick one");
  10. alertDialog.setMultiChoiceItems(items, checked, new DialogInterface.OnMultiChoiceClickListener() {
  11. @Override
  12. public void onClick(DialogInterface dialogInterface, int i, boolean b) {
  13. checked[i] = b; //改变被操作列表项的状态
  14. }
  15. });
  16. alertDialog.setNegativeButton("cancel", null);
  17. alertDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() {
  18. @Override
  19. public void onClick(DialogInterface dialogInterface, int i) {
  20. String result = "";
  21. for(int j = 0; j < checked.length;j++){
  22. if(checked[j]){
  23. result+= items[j]+"/";
  24. }
  25. }
  26. if(!"".equals(result)){
  27. Toast.makeText(RelativeActivity.this, "you picked "+ result, Toast.LENGTH_SHORT).show();
  28. }
  29. }
  30. });
  31. alertDialog.create().show();
  1. 通知 —— NotificationManager&NotificationCompat.Builder 有误,后改
  2. 广播 —— BroadcastReceiver 暂时补血

SetEvent

  1. android:onClick="myClick" —— 按钮的点击事件
  • 注册点击事件,弹出提示框
  1. public void myClick(View view) {
  2. Toast.makeText(RelativeActivity.this, "wola", Toast.LENGTH_SHORT).show();
  3. }
  1. 页面跳转
  1. (当前Activity名, 下一个Activity名)
  2. Intent intent = new Intent();
  3. intent.setClass(LogoutActivity.this, DataActivity.class);
  4. startActivity(intent);
  1. 为图片切换器设置图片切换效果
  1. ImageSwitcher is = findViewById(R.id.iswi);
  2. // 设置淡出动画效果
  3. is.setOutAnimation(AnimationUtils.loadAnimation(HanaActivity.this, android.R.anim.fade_out));
  4. is.setInAnimation(AnimationUtils.loadAnimation(HanaActivity.this, android.R.anim.fade_in));
  5. is.setFactory(new ViewSwitcher.ViewFactory() {
  6. @Override
  7. public View makeView() {
  8. ImageView iv = new ImageView(HanaActivity.this);
  9. iv.setImageResource(R.mipmap.abc0);
  10. return iv;
  11. }
  12. });
  13. /* 设置 点击图片,实现向下一张图片切换 */
  14. /* 下一张图片的名字是 abc1 */
  15. is.setOnClickListener(new View.OnClickListener() {
  16. @Override
  17. public void onClick(View view) {
  18. ((ImageSwitcher)view).setImageResource(R.mipmap.abc1);
  19. }
  20. });
  1. 使用SimpleAdapter适配器为GridView设置图片
  1. /** gridPicArr 是全局定义的int型数组,存储图片资源 **/
  2. /** cell 是自定义的样式 **/
  3. GridView gv = findViewById(R.id.grid);
  4. List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
  5. for(int i = 0; i< gridPicArr.length; i++) {
  6. Map<String, Object> map = new HashMap<String, Object>();
  7. map.put("img", gridPicArr[i]);
  8. list.add(map);
  9. }
  10. SimpleAdapter sa = new SimpleAdapter(this, list, R.layout.cell, new String[]{"img"}, new int[]{R.id.img});
  11. gv.setAdapter(sa);
  1. 使用适配器为下拉框设置元素,并设置 点击元素弹出提示框
  1. String[] ctype = new String[] {"全部", "美术","数学", "语文", "英语"};
  2. ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, ctype);
  3. adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
  4. Spinner sp = findViewById(R.id.spin);
  5. sp.setAdapter(adapter);
  6. String str = sp.getSelectedItem().toString();
  7. Toast.makeText(HanaActivity.this, str, Toast.LENGTH_SHORT).show();
  1. 为FrameLayout添加一个可以跟随手指移动的图片
  1. /** SelfView 是一个自定义的Java文件,实现图片的绘画 **/
  2. FrameLayout frameLayout = findViewById(R.id.mylayout);
  3. final SelfView selfView = new SelfView(this);
  4. // 跟随手指移动
  5. selfView.setOnTouchListener(new View.OnTouchListener() {
  6. @Override
  7. public boolean onTouch(View view, MotionEvent motionEvent) {
  8. selfView.bitmapX = motionEvent.getX();
  9. selfView.bitmapY = motionEvent.getY();
  10. selfView.invalidate();
  11. return true;
  12. }
  13. });
  14. frameLayout.addView(selfView);
    1. ScrollView scrollView = new ScrollView(SelfActivity.this);
    2. ScrollView.LayoutParams lp = new ScrollView.LayoutParams(180, 100);
    3. lp.setMargins(70, 220, 0, 0);
    4. scrollView.setLayoutParams(lp);
  1. 使用Intent和Bundle跳转页面并向第二个页面传入数据

  1. // 跳转页面
  2. Button btn = findViewById(R.id.button_logout);
  3. btn.setOnClickListener(new View.OnClickListener() {
  4. @Override
  5. public void onClick(View view) {
  6. // 获取输入的信息
  7. String qq = ((EditText)findViewById(R.id.qq)).getText().toString();
  8. String pwd = ((EditText)findViewById(R.id.pwd)).getText().toString();
  9. String email = ((EditText)findViewById(R.id.email)).getText().toString();
  10. if("".equals(qq) || "".equals(pwd) || "".equals(email) ){
  11. Toast.makeText(EnterPage.this, "请填写完整的信息",Toast.LENGTH_SHORT).show();
  12. }
  13. Intent intent = new Intent();
  14. intent.setClass(EnterPage.this, LogoutActivity.class);
  15. Bundle bundle = new Bundle();
  16. bundle.putCharSequence("qq",qq);
  17. bundle.putCharSequence("pwd",pwd);
  18. bundle.putCharSequence("email",email);
  19. intent.putExtras(bundle);
  20. startActivity(intent);
  21. }
  22. });
  1. ```java / xml1 跳转 / Intent intent = new Intent(); intent.setClass(MainActivity.this, HanaActivity.class); startActivityForResult(intent, 0x11);

/ xml2 / // 为网格视图的元素设置点击事件监听器,获取图像 保存到数据包中 gv.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { Intent intent = getIntent(); Bundle bundle = new Bundle(); bundle.putInt(“imageId”, gridPicArr[i]); intent.putExtras(bundle); setResult(0x11, intent); finish(); } });

/ xml1 重写这个方法,获取结果 / @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if(requestCode == 0x11 && resultCode == 0x11) { Bundle bundle = data.getExtras(); int imageId = bundle.getInt(“imageId”); gl.setBackgroundResource(imageId); } }

  1. - copy
  2. ```java
  3. private ImageView[] img = new ImageView[8];
  4. private int imagPath = R.mipmap.ic_launcher;
  5. GridLayout layout = findViewById(R.id.gridlayout);
  6. for(int i = 0; i < 8; i++){
  7. img[i] = new ImageView(MainActivity.this);
  8. img[i].setImageResource(imagPath);
  9. img[i].setPadding(2,2,2,2);
  10. ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(60,40);
  11. img[i].setLayoutParams(params);
  12. layout.addView(img[i]);
  13. }