脸萌6
来源:互联网 发布:8051 单片机有哪些 编辑:程序博客网 时间:2024/06/05 00:28
今天是学习脸萌 的第七天 也是马上离开长沙的倒数第二天
废话还是不说那么多 继续贴贴今天的笔记 整理下 今天的学习的思路
主界面
mainactivity 1 初始化绘图 initDraw();性别界面 以及对应的监听 ( myview加载图形大小,位置)
2 初始化顶部tab initTab();
3 初始化viewpager initViewPager();
4 初始化光标(cursor) initCursor();
5初始化水平滑动条 initHsv();
6 初始化按钮 initButton();
myfragmen
7 从外界获取 性别 以及 图片序号 以及接口
mainactivity
package com.example.android160620;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.os.Bundle;
import android.os.Environment;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.animation.TranslateAnimation;
import android.widget.Button;
import android.widget.HorizontalScrollView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.example.android160620.fragment.MyFragment;
import com.example.android160620.view.MyView;
public class MainActivity extends FragmentActivity {
private RadioGroup group;
//viewpager
private ViewPager viewPager;
//适配器
private MyAdapter adapter;
//游标
private TextView cursorView;
//水平滑动条
private HorizontalScrollView hsv;
//单选按钮
private RadioButton radioButton;
//包含绘图控件的布局
private RelativeLayout rl;
private boolean sex;
//绘制view
private MyView view;
//保存按钮
private Button saveBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 去掉title栏
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
Intent intent = getIntent();
sex = intent.getBooleanExtra("sex", true);
//初始化绘图
initDraw();
//初始化顶部tab
initTab();
//初始化viewpager
initViewPager();
//初始化
initCursor();
//初始化水平滑动条
initHsv();
//初始化按钮
initButton();
}
private void initButton() {
saveBtn = (Button) findViewById(R.id.save_btn);
saveBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//获取正在绘制的图片缓存
Bitmap bitmap = view.getDrawingCache();
//获取本地sd卡根目录
File root = Environment.getExternalStorageDirectory();
File file = new File(root, "lianmeng.png");
try {
//将图片写入本地
bitmap.compress(CompressFormat.PNG , 100, new FileOutputStream(file));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
});
}
// /**
// * 初始化绘图
// */
private void initDraw() {
rl = (RelativeLayout) findViewById(R.id.rl);
view = new MyView(this, sex);
//将绘图添加打牌布局中
rl.addView(view);
}
private void initHsv() {
hsv = (HorizontalScrollView) findViewById(R.id.hsv);
// hsv.scrollTo(x, 0)
}
private void initCursor() {
cursorView = (TextView) findViewById(R.id.cursor_tv);
}
private void initTab() {
radioButton = (RadioButton) findViewById(R.id.rb1);
group = (RadioGroup) findViewById(R.id.radiogroup);
group.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
switch(checkedId) {
case R.id.rb1:
viewPager.setCurrentItem(0);
break;
case R.id.rb2:
viewPager.setCurrentItem(1);
break;
case R.id.rb3:
viewPager.setCurrentItem(2);
break;
case R.id.rb4:
viewPager.setCurrentItem(3);
break;
case R.id.rb5:
viewPager.setCurrentItem(4);
break;
case R.id.rb6:
viewPager.setCurrentItem(5);
break;
case R.id.rb7:
viewPager.setCurrentItem(6);
break;
case R.id.rb8:
viewPager.setCurrentItem(7);
break;
case R.id.rb9:
viewPager.setCurrentItem(8);
break;
case R.id.rb10:
viewPager.setCurrentItem(9);
break;
case R.id.rb11:
viewPager.setCurrentItem(10);
break;
case R.id.rb12:
viewPager.setCurrentItem(11);
break;
}
}
});
}
private void initViewPager() {
//1、获取控件
viewPager = (ViewPager) findViewById(R.id.viewpager);
//创建数据源
//2、获取数据源
//3、创建适配器
//获取fragment的管理类
FragmentManager manager = getSupportFragmentManager();
adapter = new MyAdapter(manager);
//4、设置配齐
viewPager.setAdapter(adapter);
viewPager.setOnPageChangeListener(new OnPageChangeListener() {
/**
* 选中某个page
*/
@Override
public void onPageSelected(int position) {
// TODO Auto-generated method stub
}
//
// /**
// * 当viewpager滑动过程中触发的事件
// * position 当前的位置
// * positionOffset 当前滑动的比例
// * positionOffsetPixels 当前滑动的像素
// */
// @Override
public void onPageScrolled(int position, float positionOffset,
int positionOffsetPixels) {
//获取一个tab的宽度
int width = radioButton.getWidth();
//计算新的scrollview华东的位置
int newPos = (int) (position * width + positionOffset * width);
int center = (viewPager.getWidth() - width) / 2;
//控制水平滑动条的移动
hsv.scrollTo(newPos - center, 0);
//控制游标移动
startMoveCursor(position, positionOffset);
}
/**
* 当viewpager状态改变的时候触发事件
*/
@Override
public void onPageScrollStateChanged(int state) {
// TODO Auto-generated method stub
}
});
}
private int from = 0;
/**
* 控制游标移动
* @param position 当前移动的位置
* @param positionOffset 当前移动的百分比
*/
protected void startMoveCursor(int position, float positionOffset) {
//获取当前被选中的radiobutton
RadioButton rb = (RadioButton) group.getChildAt(position);
//定义两个长度的数组 0下标 代表x坐标 1下标y坐标
int[] location = new int[2];
//获取当前radiobutton的坐标
rb.getLocationInWindow(location);
//计算移动后的坐标
int to = (int) (location[0] + positionOffset * rb.getWidth());
//创建动画
TranslateAnimation ta = new TranslateAnimation(
from,
to,
0,
0);
ta.setDuration(100);
//动画完成以后停留在当前结束的位置
ta.setFillAfter(true);
cursorView.startAnimation(ta);
from = to;
}
private class MyAdapter extends FragmentPagerAdapter {
/**
*
* @param fm fragment的管理类
*/
public MyAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
MyFragment fragment = new MyFragment();
//创建一个bundle对象,用于传递数据
Bundle bundle = new Bundle();
bundle.putInt("index", position);
bundle.putBoolean("sex", sex);
//设置参数
fragment.setArguments(bundle);
//添加监听
fragment.setIOnClickListener(view);
return fragment;
}
@Override
public int getCount() {
return 12;
}
}
}
myview
package com.example.android160620.view;
import com.example.android160620.R;
import com.example.android160620.listener.IOnClickListener;
import com.example.android160620.util.ResourceUtils;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.View;
public class MyView extends View implements IOnClickListener{
/**
* 1、画笔 Paint
* 2、画布 Canvas
* @param context
*/
private Paint paint;
//myview的宽和高
private int width, height;
//性别
private boolean sex;
private ResourceUtils resourceUtils = new ResourceUtils();
//图片资源
private Bitmap bmp[];
private int res[];
public MyView(Context context, boolean sex) {
super(context);
this.sex = sex;
initPaint();
initBitmaps();
//允许获得绘制的图片
this.setDrawingCacheEnabled(true);
}
private void initBitmaps() {
if(sex) {
//sex true 是男生默认图
res = resourceUtils.getBoyDefault();
} else {
res = resourceUtils.getGirlDefault();
}
}
private void getBitmaps() {
//创建图片数组
bmp = new Bitmap[res.length];
for (int i = 0; i < res.length; i++) {
bmp[i] = BitmapFactory.decodeResource(getResources(), res[i]);
}
//获得合适大小的图片
//蒋思 大小
bmp[0] = Bitmap.createScaledBitmap(bmp[0], 2*width/3, 2*width/3, false);
bmp[1] = Bitmap.createScaledBitmap(bmp[1], 2*width/3, 2*width/3, false);
bmp[2] = Bitmap.createScaledBitmap(bmp[2], width/3, width/3, false);
bmp[3] = Bitmap.createScaledBitmap(bmp[3], 3*width/10, 3*width/10, false);
bmp[4] = Bitmap.createScaledBitmap(bmp[4], width/5, width/5, false);
bmp[5] = Bitmap.createScaledBitmap(bmp[5], width/2,width/2, false);
bmp[6] = Bitmap.createScaledBitmap(bmp[6], width/3, width/3, false);
bmp[7] = Bitmap.createScaledBitmap(bmp[7], 5*width/11, 5*width/11, false);
bmp[10] = Bitmap.createScaledBitmap(bmp[10], width, height, false);
}
private void initPaint() {
/**
* paint只负责绘制的样式
*/
paint = new Paint();
paint.setColor(Color.RED);
//平滑曲线
paint.setAntiAlias(true);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if(width == 0) {
width = this.getWidth();
height = this.getHeight();
}
// 位置
//通过id获取所有的资源图片
getBitmaps();
//根据图层顺序绘制图片
//先画背景
canvas.drawBitmap(bmp[10], 0,0, null);
//再绘制五官
canvas.drawBitmap(bmp[1],(width-bmp[1].getWidth())/2, (height-bmp[1].getHeight())/2, null);
canvas.drawBitmap(bmp[2],(width-bmp[2].getWidth())/2, (height-bmp[2].getHeight())/2, null);
canvas.drawBitmap(bmp[3],(width-bmp[3].getWidth())/2, (height-bmp[2].getHeight())/2+height/15, null);
canvas.drawBitmap(bmp[4],(width-bmp[4].getWidth())/2, 11*height/20, null);
canvas.drawBitmap(bmp[5],(width-bmp[5].getWidth())/2, (height-bmp[5].getHeight())/2, null);
canvas.drawBitmap(bmp[6],(width-bmp[6].getWidth())/2, (height-bmp[6].getHeight())/2+height/20, null);
canvas.drawBitmap(bmp[7],(width-bmp[7].getWidth())/2, height-bmp[7].getHeight(),null);
//最后绘制发型,画在控件中心位置
canvas.drawBitmap(bmp[0],(width-bmp[0].getWidth())/2, (height-bmp[0].getHeight())/2, null);
}
@Override
public void onClick(int index, int resId) {
res[index] = resId;
//刷新
invalidate();
}
}
myframent
package com.example.android160620.fragment;
import java.util.ArrayList;
import java.util.List;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.GridView;
import com.example.android160620.R;
import com.example.android160620.adapter.MyAdapter;
import com.example.android160620.listener.IOnClickListener;
import com.example.android160620.util.ResourceUtils;
public class MyFragment extends Fragment{
private View view;
private int index;
private boolean sex;
//===================gridview 初始化======================
private GridView gridView;
//数据源
private List<Integer> dataList = new ArrayList<Integer>();
private MyAdapter adapter;
//===================gridview 初始化======================
/**
* 创建fragment布局
*/
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.layout_fragment, container, false);
return view;
}
/**
* 和当前fragment关联的activity的oncreate方法调用完成以后,执行的方法
*/
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Bundle bundle = this.getArguments();
index = bundle.getInt("index");
sex = bundle.getBoolean("sex");
initGridView();
}
private void initGridView() {
//1、获取控件
gridView = (GridView) view.findViewById(R.id.gridview);
//2、获取数据源
getData();
//3、创建适配器:将数据源和视图(控件)绑定到一起
adapter = new MyAdapter(dataList, getActivity());
//4、将适配器绑定到gridview中
gridView.setAdapter(adapter);
gridView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
if(onClickListener != null) {
//传递当前选择的类型,和资源id
onClickListener.onClick(index, dataList.get(position));
}
}
});
}
/**
*
*/
private void getData() {
int res[] = null;
switch(index) {
case 0:
//发型
if(sex) {
res = ResourceUtils.getRealBoyHair();
} else {
res = ResourceUtils.getRealGirlHair();
}
break;
case 1:
//脸型
res = ResourceUtils.getFaceShape();
break;
case 2:
//眉毛
res = ResourceUtils.getEyeBrow();
break;
case 3:
//眼睛
res = ResourceUtils.getEye();
break;
case 4:
//嘴巴
res = ResourceUtils.getMouth();
break;
case 5:
//特征
if(sex) {
res = ResourceUtils.getRealBoyFeature();
} else {
res = ResourceUtils.getGirlFeature();
}
break;
case 6:
//眼镜
res = ResourceUtils.getGlass();
break;
case 7:
//衣服
if(sex) {
res = ResourceUtils.getBoyClothes();
} else {
res = ResourceUtils.getGirlClothes();
}
break;
case 8:
//帽子
res = ResourceUtils.getHat();
break;
case 9:
//爱好
res = ResourceUtils.getHobby();
break;
case 10:
//背景
res = ResourceUtils.getBackGround();
break;
case 11:
//气泡
res = ResourceUtils.getPop();
break;
}
//jiang
for (int i = 0; i < res.length; i++) {
dataList.add(res[i]);
}
}
/**
* 让外部传入接口对象
*/
private IOnClickListener onClickListener;
public void setIOnClickListener(IOnClickListener onClickListener) {
this.onClickListener = onClickListener;
}
}
重要的三块 代码
不过还是贴上上课写的笔记吧
图形绘制
实现每次更新
每一次界面变化都要刷新
View
静态图片(不需要主动刷新的绘制内容)
五子棋 象棋 围棋
主线程中更新界面
surfaceaview
动态界面(在线程中主动刷新)
飞机大战 坦克大战
优势 双缓冲机制
在线程中刷新界面、
context 添加到某个界面
查找??!
实现图层变化
gridview获取类型 图片id
传送给(myview)myfragment 给 myview
(多态回调)
整体过程:
分割
绘图片
监听换图层(图层变化,更新)
加油!所有人
- 脸萌6
- 脸萌android
- 脸萌4
- 脸萌5
- 脸萌2 首页布局
- android脸萌3
- Android初入门(二)“脸萌”布局
- 安卓app——脸萌
- 我对这产品有个理解二--脸萌
- 6
- 6
- 6
- 6
- 6
- 6
- 6
- 6
- 6
- Eclipse相关配置
- LCS算法找出两个字符串最长公共子串(C#实现)
- 专题四 第六道题
- IE9及以下 span元素无法触发鼠标事件解决办法
- 用php实现边执行边输出的效果
- 脸萌6
- 注解与反射
- Android,Gilde框架加载图片进内存。出现的Bitmap too large to be uploaded into a texture
- awk入门学习笔记
- Activity 之 值保存、状态恢复
- java filechannel
- css 样式使用包括样式文件导入
- uva 272
- Getting and Cleaning Data - Week 1 Quiz