Tag Archives: 基础控件

Android基础开发之Fragment的简单使用(动态加载)

1、参照Android基础开发之Fragment的简单使用(静态加载)添加两个Fragment的类及布局文件;
2、在Activity的布局文件中添加两个按钮用来进行Fragment的切换;
3、在Activity的布局文件中添加一个FrameLayout布局用于Fragment的显示;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?xml version="1.0" encoding="utf-8"?>
<linearlayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:weightSum="2"
    tools:context="com.yusian.fragment.MainActivity">
 
    <button
        android:id="@+id/btn_frag_a"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="A"></button>
 
    <button
        android:id="@+id/btn_frag_b"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="B"></button>
 
    <framelayout
        android:id="@+id/fl_fragment"
        android:layout_weight="1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
 
    </framelayout>
</linearlayout>

4、Fragment的切换涉及到Fragment的两个类:FragmentManager与FragmentTransaction;[……]

继续阅读

Android基础开发之Fragment的简单使用(静态加载)

1、创建Fragment的布局文件,如fragment_up.xml;

1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0" encoding="utf-8"?>
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#FF0000">
    <textview
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello Fragment"
        android:textColor="#FFFFFF"></textview>
 
</linearlayout>

2、创建Fragment的子类,实现onCreateView()方法;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package com.yusian.fragment;
 
 
import android.app.Fragment;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
 
/**
 * Created by Sian on 2017/3/18.
 */
 
public class UpFragment extends Fragment {
    @Nullable
    @Override
    // 相当于Activity的setContentView;
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_up, container, false);
    }
}

3、在Activity的布局文件中添加fragment标签[……]

继续阅读

Android开发实战小游戏“1秒OneSecond”,适合新手训练

1、先上图看下效果

2、基本需求
2.1、玩家凭个人感觉长按点击区域,大概1秒时松开,系统会检测本次时间;
2.2、如果时间误差在0.1秒内(超过0.1秒或差0.1秒)均记录“大神”1次,否则记录“凡人”1次;
2.3、“大神”1次以红色显示,突出效果;

3、主要技术点
3.1、相对布局加线性布局,整体使用相对布局,中间按钮部分使用线性布局;
3.2、中间长按区域不是按钮,是一个布局(可以看成是一个View),并且绑定onTouch事件;
3.3、普通View要实现Touch事件必须加上属性android:clickable=”true”,否则只能TouchDown,其他均无法响应;
3.4、“按钮”上有两行文字,必要的时候只显示一行,2行时平分,1行是居中;
3.5、android:visibility=”xxx”,xxx有三个枚举值分别为:gone、visible、invisible;[……]

继续阅读

Android实战开发小游戏BullsEye,初学者基本控件练习Demo

1、上图,先上图再BB

2、设计说明
2.1、游戏中随机给了一个数字,玩家在一个进度条中凭自己的感觉调出该数字;
2.2、点击确定后,游戏根据玩家调整出的精度给出一个分数,越吻合分数越高;
2.3、附带一个计分与复位功能,一个帮助的弹框;

3、主要技术点
3.1、基本布局,将手机屏幕分割为上中下三大块纵向布局,每一个小格中再根据需要进行纵身或横向布局,如下图所示

3.2、对于初学者来讲,布局中值得一提的有gravity与layout_gravity这两个属性,layout_gravity对其内部子控件生效,而gravity对自身生效;
3.3、比如android:gravity:center_horizontal,表示当前控件水平居中,但前提条件是该控件是被纵向布局的,如果该控件本身是被横向布局的,那么横向到底有多长是未知的,从而设置也就无效;如果该控件是纵向布局的,那居中表示的肯定就是横向居中;[……]

继续阅读

Android自定义View通过触摸事件移动View的位置

1、上图给吃瓜群众

这个安卓小机器人是可以通过触摸屏幕而跟着你手指动的!!

2、Demo基本设计思路
2.1、自定义一个GameView继承自View;
2.2、在View上绘制一个Bitmap对象,后续会通过触摸事件来改变该图的位置;
2.3、监听Activity的onTouchEvent事件,将事件发生的坐标传递给自定义View;
2.4、自定义View中通过接收到的坐标位置,实时改变Bitmap所处的位置,实现类型移动某对象的功能;

3、关键代码
3.1、自定义View:GameView

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package com.yusian.event.game;
 
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.view.View;
 
/**
 * Created by Sian on 2017/3/8.
 */
 
public class GameView extends View {
 
    Bitmap bitmap = null;
    private float bitmapX, bitmapY;
 
    public void setBitmapPoint(float x, float y){
        this.bitmapX = x;
        this.bitmapY = y;
        // 使用View的invalidate()方法刷新页面,使之调用onDraw()方法
        this.invalidate();
    }
 
    // 希望在XML布局文件中添加控件,实现该构造方法
    public GameView(Context context, AttributeSet attrs){
        super(context, attrs);
        // 取出图片id
        int id = com.yusian.event.R.mipmap.ic_launcher;
        // 使用BitmapFactory的静态方法decodeResoure()生成Bitmap图片
        // view的getResource()方法可取到当前资料包
        bitmap = BitmapFactory.decodeResource(getResources(), id);
    }
 
    @Override
    // 页面创建或被刷新时被调用
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        // 画布上绘制一个位图
        canvas.drawBitmap(bitmap, bitmapX, bitmapY, null);
    }
}

3.2、XML[……]

继续阅读