5min通过ViewPager实现简易微信主界面(1)-雏形
来源:互联网 发布:aes加解密 java 编辑:程序博客网 时间:2024/05/17 01:07
今天我们学一下ViewPager并用它做一个简易的微信主界面,完成一个雏形。
Demo完成后效果如下图:
我们先定义ViewPagerIndicator继承自LinearLayout,里面会有3个TextView,作为顶部选项栏。在这里我们还绘制了一个小三角形,后期我们将实现三角形联动的效果。
<span style="font-size:18px;">import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.CornerPathEffect;import android.graphics.Paint;import android.graphics.Path;import android.util.AttributeSet;import android.widget.LinearLayout;/** * Created by 权兴权意 on 2016/9/26. */public class ViewPagerIndicator extends LinearLayout { private Paint mPaint; private Path mPath; private int mTriangleWidth; private int mTriangleHeight; private static final float RADIO_TRIANGLE_WIDTH = 1 / 6F; private int mInitTranslationX; private int mMoveTranslationX; public ViewPagerIndicator(Context context) { this(context, null); } public ViewPagerIndicator(Context context, AttributeSet attrs) { super(context, attrs); //初始化画笔 mPaint = new Paint(); mPaint.setAntiAlias(true);//设置抗锯齿 mPaint.setColor(Color.parseColor("#ffffffff")); mPaint.setStyle(Paint.Style.FILL); mPaint.setPathEffect(new CornerPathEffect(3));//三角形不显得太尖锐 } @Override protected void dispatchDraw(Canvas canvas) { canvas.save(); canvas.translate(mInitTranslationX+mMoveTranslationX,getHeight()+2); canvas.drawPath(mPath,mPaint); canvas.restore(); super.dispatchDraw(canvas); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); mTriangleWidth = (int) (w / 3 * RADIO_TRIANGLE_WIDTH); mTriangleHeight = mTriangleWidth / 2;//45度 mInitTranslationX = w / 3 / 2 - mTriangleWidth / 2; initTriangle(); } private void initTriangle() { mPath = new Path(); mPath.moveTo(0,0); mPath.lineTo(mTriangleWidth,0); mPath.lineTo(mTriangleWidth/2,-mTriangleHeight); mPath.close(); }}</span>
<span style="font-size:18px;"><?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:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="#ffffffff" > <com.quan.car.viewpagertest.ViewPagerIndicator android:id="@+id/top_vpi_main" android:layout_width="match_parent" android:layout_height="45dp" android:orientation="horizontal" android:background="@mipmap/bg_black" > <TextView android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:text="微信" android:textColor="#CCFFFFFF" android:textSize="16sp" android:gravity="center" /> <TextView android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:text="发现" android:textColor="#CCFFFFFF" android:textSize="16sp" android:gravity="center" /> <TextView android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:text="我的" android:textColor="#CCFFFFFF" android:textSize="16sp" android:gravity="center" /> </com.quan.car.viewpagertest.ViewPagerIndicator><android.support.v4.view.ViewPager android:id="@+id/main_vp_main" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" ></android.support.v4.view.ViewPager></LinearLayout></span>
<span style="font-size:18px;">import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v4.app.Fragment;import android.view.Gravity;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;/** * Created by 权兴权意 on 2016/9/29. */public class BaseFragment extends Fragment { private String mTitle; public static final String BUNDLE_TITLE = "title"; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { Bundle bundle = getArguments(); if(bundle != null) mTitle = bundle.getString(BUNDLE_TITLE); TextView tv = new TextView(getActivity()); tv.setText(mTitle); tv.setGravity(Gravity.CENTER); return tv; } public static BaseFragment newInstance(String title){ Bundle bundle = new Bundle(); bundle.putString(BUNDLE_TITLE,title); BaseFragment baseFragment = new BaseFragment(); baseFragment.setArguments(bundle); return baseFragment; }}</span>
<span style="font-size:18px;"> private ViewPagerIndicator top_vpi_main; private ViewPager main_vp_main; private List<String> titles = Arrays.asList("微信","发现","我的"); private List<BaseFragment> contents = new ArrayList<BaseFragment>(); private FragmentPagerAdapter adapter;</span>
<span style="font-size:18px;"> main_vp_main = (ViewPager) findViewById(R.id.main_vp_main); top_vpi_main = (ViewPagerIndicator) findViewById(R.id.top_vpi_main);</span>
初始化数据:
<span style="font-size:18px;"> for (String t : titles){ BaseFragment baseFragment = BaseFragment.newInstance(t); contents.add(baseFragment); adapter = new FragmentPagerAdapter(getSupportFragmentManager()) { @Override public Fragment getItem(int position) { return contents.get(position); } @Override public int getCount() { return contents.size(); } }; } main_vp_main.setAdapter(adapter);</span>
完整源代码如下:
<span style="font-size:18px;">import android.os.Bundle;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentActivity;import android.support.v4.app.FragmentPagerAdapter;import android.support.v4.view.ViewPager;import android.view.Window;import java.util.ArrayList;import java.util.Arrays;import java.util.List;public class MainActivity extends FragmentActivity { private ViewPagerIndicator top_vpi_main; private ViewPager main_vp_main; private List<String> titles = Arrays.asList("微信","发现","我的"); private List<BaseFragment> contents = new ArrayList<BaseFragment>(); private FragmentPagerAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); initViews(); initDatas(); } private void initDatas() { for (String t : titles){ BaseFragment baseFragment = BaseFragment.newInstance(t); contents.add(baseFragment); adapter = new FragmentPagerAdapter(getSupportFragmentManager()) { @Override public Fragment getItem(int position) { return contents.get(position); } @Override public int getCount() { return contents.size(); } }; } main_vp_main.setAdapter(adapter); } private void initViews() { main_vp_main = (ViewPager) findViewById(R.id.main_vp_main); top_vpi_main = (ViewPagerIndicator) findViewById(R.id.top_vpi_main); }}</span>
0 0
- 5min通过ViewPager实现简易微信主界面(1)-雏形
- 5min通过ViewPager实现简易微信主界面(2)-移动指示器
- Android通过ViewPager实现引导界面(一)
- 利用 ORMLite 数据库,ViewPager 等实现简易的登陆界面
- TabLayout+ViewPager简易实现
- 10min实现一个简易图片查看器(触类旁通)
- Java语言实现简易计算器(1)界面
- (微信框架之雏形)ViewPager+Fragment实现滑动标签页
- viewpager实现界面滑动
- viewpager实现欢迎界面
- 构造栈的数据结构,要求实现min函数,通过min函数取得栈中的最小值。要求PUSH, POP, MIN的时间复杂度为O(1)
- 简易登陆界面的实现
- C# 实现简易QQ界面
- [cocos2d-x][游戏开发]通过cocos2d-x实现简易飞机大战02 主界面创建
- [cocos2d-x][游戏开发]通过cocos2d-x实现简易飞机大战 09.游戏界面 道具
- [cocos2d-x][游戏开发]通过cocos2d-x实现简易飞机大战 10.游戏界面 特效
- 欢迎界面,自定义viewpager实现
- ViewPager+Fragment实现界面滑动
- react native 学习之模仿”探探“实现豆瓣电影app部分功能
- lua实现xxTea加解密
- 熟读 6E
- 什么导致了消失的梯度问题?深度神经网络中的梯度不稳定性
- secureCRT安装及破解
- 5min通过ViewPager实现简易微信主界面(1)-雏形
- 嵌入式系统学习(一)-S5P4418 芯片介绍
- Windows C++发送以太网(Ethernet)帧
- Bootstrap Tooltip显示换行和左对齐
- 预定义函数对象和函数适配器案例
- Node.js TTY模块
- JavaScript方法join()、splice()、slice()、split()
- IIS 试图加载格式不正确的程序的解决办法2
- 完成工具