Android实战_note1(MyMirror_一款小型摄像处理的App)

最近在实战做明日科技的一个叫《魔镜》的APP,接触到不少有趣的技能tip,这里记录一下。功能点主要有启动页、摄像头设置、亮度调节、相机焦距调节。界面选择换镜框、吹气起雾、长安碎屏、摇一摇换镜框、系统帮助等子功能,博客会陆续更近

本文自觉有些有趣的地方(这里仅做摘要,详见文中):
  • handler.sendEmptyMessageDelayed()
  • 1.3 中的修改全局配置文件 AndroidManifest.xml
  • name属性表示颜色变量名,在java中调用时就是调用这个名称;#3F51B5表示颜色值;调用格式为@color/setbackground。其中颜色值可以直接在xml中输入,或者点击色块,在弹出窗口中进行选择或输入设置;(如文《资源准备1:颜色资源》中图)
  • 资源准备4:styles样式资源
    MyTheme表示样式的名称,
    android:windowFrame表示窗口的背景颜色,
    android:windowBackground表示窗口的背景图片,
    android:windowIsTranslucent表示窗口是否显示,
    android:windowNoTitle表示窗口是否有标题
  • 一般情况,除了直接使用放在drawable目录下的图片,其实drawable的用法都与XML有关,使用shape、layer-list等标签绘制一些背景,还可以通过selector标签定义view的状态效果。
  • ImageView.ScaleType设置图解

功能点1.快速构建启动页:

此时目录结构:


Android实战_note1(MyMirror_一款小型摄像处理的App)_第1张图片



1.1 Activity.java全文:
注意代码中的注释,其中 handler.sendEmptyMessageDelayed(1,3000); 这个方法比较有趣

package com.example.mymirror.activity;

import android.content.Intent;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.KeyEvent;

import com.example.mymirror.MainActivity;
import com.example.mymirror.R;

public class GuideActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_guide);
        handler.sendEmptyMessageDelayed(1,3000);//传递what值为1的,空消息,延迟3秒
    }
    //消息处理,接收消息
    private Handler handler = new Handler(new Handler.Callback() {
        @Override
        public boolean handleMessage(Message msg) {
            if (msg.what == 1){
                //创建意图
                Intent intent = new Intent(GuideActivity.this, MainActivity.class);
                startActivity(intent);//跳转界面
                finish();//关闭界面
            }
            return false;
        }
    });

    //屏蔽返回键
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK){
            return false;
        }
        return false;
    }
}

1.2 布局问价设置背景图片:

android:background="@mipmap/background"

全文:





1.3 修改全局配置文件 AndroidManifest.xml

Android实战_note1(MyMirror_一款小型摄像处理的App)_第2张图片




    
        
            
                

                
            
        
        
    


到此,运行程序,结果:启动页界面停顿3秒后,切到MainActivity上:

Android实战_note1(MyMirror_一款小型摄像处理的App)_第3张图片
启动页

Android实战_note1(MyMirror_一款小型摄像处理的App)_第4张图片
停顿3秒后,切到MainActivity上

2.主窗体模块设计

资源准备1:颜色资源
打开app/res/values目录下的colors.xml:



    #3F51B5
    #303F9F
    #FF4081
    #a6000000
    #FFFFFF
    #3FFFFFFF
    #00000000
    #7e000000

name属性表示颜色变量名,在java中调用时就是调用这个名称;#3F51B5表示颜色值;调用格式为@color/setbackground。其中颜色值可以直接在xml中输入,或者点击下图框中的色块,在弹出窗口中进行选择或输入设置:

Android实战_note1(MyMirror_一款小型摄像处理的App)_第5张图片

Android实战_note1(MyMirror_一款小型摄像处理的App)_第6张图片

资源准备2:尺寸资源

调用格式为@dimen/dp_0



    
    16dp
    16dp
    0dp
    3dp
    5dp
    10dp
    18dp
    20dp
    30dp
    45dp
    55dp
    160dp
    200dp
    300dp

资源准备3:字符串资源


    MyMirror
    返回

资源准备4:styles样式资源

MyTheme表示样式的名称,
android:windowFrame表示窗口的背景颜色,
android:windowBackground表示窗口的背景图片,
android:windowIsTranslucent表示窗口是否显示,
android:windowNoTitle表示窗口是否有标题



    
    
    

资源准备5:drawable图片资源

一般情况,除了直接使用放在drawable目录下的图片,其实drawable的用法都与XML有关,使用shape、layer-list等标签绘制一些背景,还可以通过selector标签定义view的状态效果。



    
    





    
    
    
    
    
    
    
    





    
    
    
    

资源准备6:mipmap资源(项目完成后附上码云地址)

Android实战_note1(MyMirror_一款小型摄像处理的App)_第7张图片

主窗体布局:

即activity_main.xml布局,布局设计框架如下:

Android实战_note1(MyMirror_一款小型摄像处理的App)_第8张图片

        
            
            
            
                
                
                
            

activity_main.xml全文:

附:ImageView.ScaleType设置图解



    
    
    
    

    
        
        
        
        
    
    


Design界面显示:

Android实战_note1(MyMirror_一款小型摄像处理的App)_第9张图片

创建view包,在包中添加PictureView、FunctionView、DrawView三个java文件用于描述自定义控件:

Android实战_note1(MyMirror_一款小型摄像处理的App)_第10张图片

layout文件夹下创建文件view_function.xml,存放顶部功能栏布局:



    
        
        
        
        
        
        
        
        
        
        
    


对应预览图:

Android实战_note1(MyMirror_一款小型摄像处理的App)_第11张图片

FunctionView全文:

package com.example.mymirror.view;

import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;

/**
 * Created by 700 on 2018/8/23.
 */

public class FunctionView extends LinearLayout implements View.OnClickListener{
    private LayoutInflater mInflater;//声明寻找XML文件类
    private ImageView hint,choose,down,up;//控件对象
    /**
     * 回调接口,4个按钮
     */
    private onFunctionViewItemClickListener listener;
    public interface onFunctionViewItemClickListener{
        void hint();//提示
        void choose();//选择相框
        void down();//减少亮度
        void up();//增加亮度
    }
    /**
     * 初始化构造函数
     */
    public FunctionView(Context context) {
        super(context);
    }

    public FunctionView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public FunctionView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    public void onClick(View v) {
        
    }

    public void setOnFunctionViewItemClickListener(onFunctionViewItemClickListener monFunctionViewItemClickListener){
        this.listener = monFunctionViewItemClickListener;//设置监听对象
    }
}

PictureView全文:

package com.example.mymirror.view;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.ImageView;


/**
 * Created by 700 on 2018/8/23.
 */

public class PictureView extends ImageView {
    public PictureView(Context context) {
        super(context);
    }

    public PictureView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public PictureView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
}

DrawView全文:

package com.example.mymirror.view;

import android.content.Context;
import android.util.AttributeSet;
import android.view.View;

/**
 * Created by 700 on 2018/8/23.
 */

public class DrawView extends View{
    public DrawView(Context context) {
        super(context);
    }

    public DrawView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public DrawView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
}

运行结果:


Android实战_note1(MyMirror_一款小型摄像处理的App)_第12张图片

你可能感兴趣的:(Android实战_note1(MyMirror_一款小型摄像处理的App))