From e5dfd5b975f692fd8267091ddf373befd587f6d5 Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Thu, 20 Feb 2025 14:59:09 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8B=A8=E5=8F=B7=E5=9F=BA=E6=9C=AC=E6=A1=86?= =?UTF-8?q?=E6=9E=B6=E8=AE=BE=E8=AE=A1=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contacts/build.gradle | 5 +- contacts/build.properties | 4 +- contacts/src/main/AndroidManifest.xml | 37 ++-- .../winboll/studio/contacts/MainActivity.java | 172 +++++++++++++----- .../contacts/adapters/ImagePagerAdapter.java | 14 ++ .../contacts/adapters/MyPagerAdapter.java | 42 +++++ .../contacts/fragments/CallFragment.java | 51 ++++++ .../contacts/fragments/ContactsFragment.java | 50 +++++ .../contacts/fragments/LogFragment.java | 50 +++++ .../src/main/res/layout/activity_main.xml | 31 +--- .../src/main/res/layout/fragment_call.xml | 29 +++ .../src/main/res/layout/fragment_contacts.xml | 15 ++ contacts/src/main/res/layout/fragment_log.xml | 12 ++ winboll-shared/build.properties | 4 +- 14 files changed, 428 insertions(+), 88 deletions(-) create mode 100644 contacts/src/main/java/cc/winboll/studio/contacts/adapters/ImagePagerAdapter.java create mode 100644 contacts/src/main/java/cc/winboll/studio/contacts/adapters/MyPagerAdapter.java create mode 100644 contacts/src/main/java/cc/winboll/studio/contacts/fragments/CallFragment.java create mode 100644 contacts/src/main/java/cc/winboll/studio/contacts/fragments/ContactsFragment.java create mode 100644 contacts/src/main/java/cc/winboll/studio/contacts/fragments/LogFragment.java create mode 100644 contacts/src/main/res/layout/fragment_call.xml create mode 100644 contacts/src/main/res/layout/fragment_contacts.xml create mode 100644 contacts/src/main/res/layout/fragment_log.xml diff --git a/contacts/build.gradle b/contacts/build.gradle index 89322a4..32df31f 100644 --- a/contacts/build.gradle +++ b/contacts/build.gradle @@ -59,9 +59,10 @@ dependencies { api 'org.jsoup:jsoup:1.13.1' api 'com.squareup.okhttp3:okhttp:4.4.1' - api 'androidx.appcompat:appcompat:1.3.1' + api 'androidx.appcompat:appcompat:1.1.0' + api 'androidx.viewpager:viewpager:1.0.0' api 'androidx.fragment:fragment:1.1.0' - api 'com.google.android.material:material:1.1.0' + api 'com.google.android.material:material:1.4.0' api 'cc.winboll.studio:libapputils:9.3.2' api 'cc.winboll.studio:libappbase:1.5.5' diff --git a/contacts/build.properties b/contacts/build.properties index d1c9e68..e0bef68 100644 --- a/contacts/build.properties +++ b/contacts/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Thu Feb 20 03:27:00 GMT 2025 +#Thu Feb 20 06:57:14 GMT 2025 stageCount=0 libraryProject=winboll-shared baseVersion=1.0 publishVersion=1.0.0 -buildCount=91 +buildCount=98 baseBetaVersion=1.0.1 diff --git a/contacts/src/main/AndroidManifest.xml b/contacts/src/main/AndroidManifest.xml index 5ccab58..4ab1fb6 100644 --- a/contacts/src/main/AndroidManifest.xml +++ b/contacts/src/main/AndroidManifest.xml @@ -6,6 +6,9 @@ + + + - @@ -57,25 +61,36 @@ - + - - - + + + + + + + + + android:resource="@xml/appwidget_provider_info"/> + - - - - + + + + + + + - + \ No newline at end of file diff --git a/contacts/src/main/java/cc/winboll/studio/contacts/MainActivity.java b/contacts/src/main/java/cc/winboll/studio/contacts/MainActivity.java index 9177664..02a7adb 100644 --- a/contacts/src/main/java/cc/winboll/studio/contacts/MainActivity.java +++ b/contacts/src/main/java/cc/winboll/studio/contacts/MainActivity.java @@ -6,26 +6,28 @@ import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; -import android.view.View; import android.widget.CheckBox; +import com.google.android.material.tabs.TabLayout; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; -import cc.winboll.studio.contacts.BuildConfig; -import cc.winboll.studio.contacts.MainActivity; +import androidx.viewpager.widget.ViewPager; import cc.winboll.studio.contacts.R; +import cc.winboll.studio.contacts.adapters.MyPagerAdapter; import cc.winboll.studio.contacts.beans.MainServiceBean; -import cc.winboll.studio.contacts.services.MainService; -import cc.winboll.studio.libappbase.GlobalApplication; import cc.winboll.studio.libappbase.LogUtils; import cc.winboll.studio.libappbase.LogView; -import cc.winboll.studio.libappbase.SOS; -import cc.winboll.studio.libappbase.bean.APPSOSBean; import cc.winboll.studio.libapputils.app.IWinBollActivity; import cc.winboll.studio.libapputils.app.WinBollActivityManager; import cc.winboll.studio.libapputils.bean.APPInfo; import cc.winboll.studio.libapputils.view.YesNoAlertDialog; +import android.widget.ImageView; +import android.view.View; +import java.util.ArrayList; +import android.view.LayoutInflater; +import android.widget.LinearLayout; +import java.util.List; -final public class MainActivity extends AppCompatActivity implements IWinBollActivity { +final public class MainActivity extends AppCompatActivity implements IWinBollActivity, ViewPager.OnPageChangeListener, View.OnClickListener { public static final String TAG = "MainActivity"; @@ -38,6 +40,14 @@ final public class MainActivity extends AppCompatActivity implements IWinBollAct Toolbar mToolbar; CheckBox cbMainService; MainServiceBean mMainServiceBean; + ViewPager viewPager; + private List views; //用来存放放进ViewPager里面的布局 + //实例化存储imageView(导航原点)的集合 + ImageView[] imageViews; + //MyPagerAdapter adapter;//适配器 + MyPagerAdapter pagerAdapter; + LinearLayout linearLayout;//下标所在在LinearLayout布局里 + int currentPoint = 0;//当前被选中中页面的下标 @Override public AppCompatActivity getActivity() { @@ -70,11 +80,7 @@ final public class MainActivity extends AppCompatActivity implements IWinBollAct // 以下正常创建主窗口 super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); - - mLogView = findViewById(R.id.activitymainLogView1); - - if (GlobalApplication.isDebuging()) { mLogView.start(); } - + // 初始化工具栏 mToolbar = findViewById(R.id.activitymainToolbar1); setSupportActionBar(mToolbar); @@ -84,45 +90,117 @@ final public class MainActivity extends AppCompatActivity implements IWinBollAct } getSupportActionBar().setSubtitle(getTag()); - //ToastUtils.show("WinBollUI_TYPE " + WinBollApplication.getWinBollUI_TYPE()); - LogUtils.d(TAG, "BuildConfig.DEBUG : " + Boolean.toString(BuildConfig.DEBUG)); + initData(); + initView();//调用初始化视图方法 + //initPoint();//调用初始化导航原点的方法 + viewPager.addOnPageChangeListener(this);//滑动事件 + + ViewPager viewPager = findViewById(R.id.activitymainViewPager1); + MyPagerAdapter pagerAdapter = new MyPagerAdapter(getSupportFragmentManager()); + viewPager.setAdapter(pagerAdapter); + TabLayout tabLayout = findViewById(R.id.activitymainTabLayout1); + tabLayout.setupWithViewPager(viewPager); - mMainServiceBean = MainServiceBean.loadBean(this, MainServiceBean.class); - if (mMainServiceBean == null) { - mMainServiceBean = new MainServiceBean(); - } - cbMainService = findViewById(R.id.activitymainCheckBox1); - cbMainService.setChecked(mMainServiceBean.isEnable()); - cbMainService.setOnClickListener(new View.OnClickListener(){ - @Override - public void onClick(View view) { - if (cbMainService.isChecked()) { - MainService.startMainService(MainActivity.this); - } else { - MainService.stopMainService(MainActivity.this); - } - } - }); +// mMainServiceBean = MainServiceBean.loadBean(this, MainServiceBean.class); +// if (mMainServiceBean == null) { +// mMainServiceBean = new MainServiceBean(); +// } +// cbMainService = findViewById(R.id.activitymainCheckBox1); +// cbMainService.setChecked(mMainServiceBean.isEnable()); +// cbMainService.setOnClickListener(new View.OnClickListener(){ +// @Override +// public void onClick(View view) { +// if (cbMainService.isChecked()) { +// MainService.startMainService(MainActivity.this); +// } else { +// MainService.stopMainService(MainActivity.this); +// } +// } +// }); + } + + + //初始化view,即显示的图片 + void initView() { + viewPager = findViewById(R.id.activitymainViewPager1); + pagerAdapter = new MyPagerAdapter(getSupportFragmentManager()); + viewPager.setAdapter(pagerAdapter); + //adapter = new MyPagerAdapter(views); + //viewPager = findViewById(R.id.activitymainViewPager1); + //viewPager.setAdapter(adapter); + //linearLayout = findViewById(R.id.activitymainLinearLayout1); + //initPoint();//初始化页面下方的点 + viewPager.setOnPageChangeListener(this); + } -// public static void sosToWinBoll(Context context) { -// Intent intent = new Intent(ACTION_SOS); -// intent.putExtra("sos", "SOS"); -// intent.putExtra("sosPackage", context.getPackageName()); -// intent.putExtra("sosCalssType", "Service"); -// intent.putExtra("sosClassName", MainService.class.getName()); -// String szToPackage = ""; -// if (GlobalApplication.isDebuging()) { -// szToPackage = "cc.winboll.studio.appbase.beta"; -// } else { -// szToPackage = "cc.winboll.studio.appbase"; + //初始化所要显示的布局 + void initData() { + ViewPager viewPager = findViewById(R.id.activitymainViewPager1); + LayoutInflater inflater = LayoutInflater.from(getActivity()); + View view1 = inflater.inflate(R.layout.fragment_call, viewPager, false); + View view2 = inflater.inflate(R.layout.fragment_contacts, viewPager, false); + View view3 = inflater.inflate(R.layout.fragment_log, viewPager, false); + + views = new ArrayList<>(); + views.add(view1); + views.add(view2); + views.add(view3); + } + +// void initPoint() { +// imageViews = new ImageView[5];//实例化5个图片 +// for (int i = 0; i < linearLayout.getChildCount(); i++) { +// imageViews[i] = (ImageView) linearLayout.getChildAt(i); +// imageViews[i].setImageResource(R.drawable.ic_launcher); +// imageViews[i].setOnClickListener(this);//点击导航点,即可跳转 +// imageViews[i].setTag(i);//重复利用实例化的对象 // } -// intent.setPackage(szToPackage); -// context.sendBroadcast(intent); -// -// LogUtils.d(TAG, String.format("SOS Send To WinBoll. (szToPackage : %s)", szToPackage)); -// //ToastUtils.show("SOS Send To WinBoll"); +// currentPoint = 0;//默认第一个坐标 +// imageViews[currentPoint].setImageResource(R.drawable.ic_launcher); // } + + //OnPageChangeListener接口要实现的三个方法 + /* onPageScrollStateChanged(int state) + 此方法是在状态改变的时候调用,其中state这个参数有三种状态: + SCROLL_STATE_DRAGGING(1)表示用户手指“按在屏幕上并且开始拖动”的状态 + (手指按下但是还没有拖动的时候还不是这个状态,只有按下并且手指开始拖动后log才打出。) + SCROLL_STATE_IDLE(0)滑动动画做完的状态。 + SCROLL_STATE_SETTLING(2)在“手指离开屏幕”的状态。*/ + @Override + public void onPageScrollStateChanged(int state) { + + } + /* onPageScrolled(int position, float positionOffset, int positionOffsetPixels) + 当页面在滑动的时候会调用此方法,在滑动被停止之前,此方法回一直得到调用。其中三个参数的含义分别为: + + position :当前页面,即你点击滑动的页面(从A滑B,则是A页面的position。 + positionOffset:当前页面偏移的百分比 + positionOffsetPixels:当前页面偏移的像素位置*/ + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + + } + /* onPageSelected(int position) + 此方法是页面滑动完后得到调用,position是你当前选中的页面的Position(位置编号) + (从A滑动到B,就是B的position)*/ + public void onPageSelected(int position) { + +// ImageView preView = imageViews[currentPoint]; +// preView.setImageResource(R.drawable.ic_launcher); +// ImageView currView = imageViews[position]; +// currView.setImageResource(R.drawable.ic_launcher); +// currentPoint = position; + } + + //小圆点点击事件 + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + //通过getTag(),可以判断是哪个控件 +// int i = (Integer) v.getTag(); +// viewPager.setCurrentItem(i);//直接跳转到某一个页面的情况 + } @Override protected void onPostCreate(Bundle savedInstanceState) { diff --git a/contacts/src/main/java/cc/winboll/studio/contacts/adapters/ImagePagerAdapter.java b/contacts/src/main/java/cc/winboll/studio/contacts/adapters/ImagePagerAdapter.java new file mode 100644 index 0000000..974c4ce --- /dev/null +++ b/contacts/src/main/java/cc/winboll/studio/contacts/adapters/ImagePagerAdapter.java @@ -0,0 +1,14 @@ +package cc.winboll.studio.contacts.adapters; + +/** + * @Author ZhanGSKen@AliYun.Com + * @Date 2025/02/20 14:20:38 + * @Describe ImagePagerAdapter + */ +public class ImagePagerAdapter { + + public static final String TAG = "ImagePagerAdapter"; + + + +} \ No newline at end of file diff --git a/contacts/src/main/java/cc/winboll/studio/contacts/adapters/MyPagerAdapter.java b/contacts/src/main/java/cc/winboll/studio/contacts/adapters/MyPagerAdapter.java new file mode 100644 index 0000000..3212231 --- /dev/null +++ b/contacts/src/main/java/cc/winboll/studio/contacts/adapters/MyPagerAdapter.java @@ -0,0 +1,42 @@ +package cc.winboll.studio.contacts.adapters; + +/** + * @Author ZhanGSKen@AliYun.Com + * @Date 2025/02/20 13:33:04 + * @Describe MyPagerAdapter + */ +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentPagerAdapter; +import cc.winboll.studio.contacts.fragments.CallFragment; +import cc.winboll.studio.contacts.fragments.ContactsFragment; +import cc.winboll.studio.contacts.fragments.LogFragment; + +public class MyPagerAdapter extends FragmentPagerAdapter { + public static final String TAG = "MyPagerAdapter"; + + private static final int PAGE_COUNT = 3; + + public MyPagerAdapter(@NonNull FragmentManager fm) { + super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT); + } + + @NonNull + @Override + public Fragment getItem(int position) { + if(position == 1) { + return ContactsFragment.newInstance(position); + } else if(position == 2) { + return LogFragment.newInstance(position); + } else { + return CallFragment.newInstance(position); + } + } + + @Override + public int getCount() { + return PAGE_COUNT; + } +} + diff --git a/contacts/src/main/java/cc/winboll/studio/contacts/fragments/CallFragment.java b/contacts/src/main/java/cc/winboll/studio/contacts/fragments/CallFragment.java new file mode 100644 index 0000000..6acb172 --- /dev/null +++ b/contacts/src/main/java/cc/winboll/studio/contacts/fragments/CallFragment.java @@ -0,0 +1,51 @@ +package cc.winboll.studio.contacts.fragments; + +/** + * @Author ZhanGSKen@AliYun.Com + * @Date 2025/02/20 12:57:00 + * @Describe 拨号 + */ +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import androidx.fragment.app.Fragment; +import cc.winboll.studio.contacts.R; +import cc.winboll.studio.libappbase.LogView; +import androidx.annotation.Nullable; +import androidx.annotation.NonNull; +import android.widget.TextView; + +public class CallFragment extends Fragment { + + public static final String TAG = "CallFragment"; + + private static final String ARG_PAGE = "ARG_PAGE"; + private int mPage; + + public static CallFragment newInstance(int page) { + Bundle args = new Bundle(); + args.putInt(ARG_PAGE, page); + CallFragment fragment = new CallFragment(); + fragment.setArguments(args); + return fragment; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + if (getArguments()!= null) { + mPage = getArguments().getInt(ARG_PAGE); + } + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_call, container, false); + TextView textView = view.findViewById(R.id.page_text); + textView.setText("这是第 " + mPage + " 页"); + return view; + } +} diff --git a/contacts/src/main/java/cc/winboll/studio/contacts/fragments/ContactsFragment.java b/contacts/src/main/java/cc/winboll/studio/contacts/fragments/ContactsFragment.java new file mode 100644 index 0000000..2f7dad6 --- /dev/null +++ b/contacts/src/main/java/cc/winboll/studio/contacts/fragments/ContactsFragment.java @@ -0,0 +1,50 @@ +package cc.winboll.studio.contacts.fragments; + +/** + * @Author ZhanGSKen@AliYun.Com + * @Date 2025/02/20 12:57:50 + * @Describe 联系人 + */ +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import cc.winboll.studio.contacts.R; + +public class ContactsFragment extends Fragment { + + public static final String TAG = "ContactsFragment"; + + private static final String ARG_PAGE = "ARG_PAGE"; + private int mPage; + + public static ContactsFragment newInstance(int page) { + Bundle args = new Bundle(); + args.putInt(ARG_PAGE, page); + ContactsFragment fragment = new ContactsFragment(); + fragment.setArguments(args); + return fragment; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + if (getArguments()!= null) { + mPage = getArguments().getInt(ARG_PAGE); + } + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_contacts, container, false); + TextView textView = view.findViewById(R.id.page_text); + textView.setText("这是第 " + mPage + " 页"); + return view; + } +} diff --git a/contacts/src/main/java/cc/winboll/studio/contacts/fragments/LogFragment.java b/contacts/src/main/java/cc/winboll/studio/contacts/fragments/LogFragment.java new file mode 100644 index 0000000..e2df22a --- /dev/null +++ b/contacts/src/main/java/cc/winboll/studio/contacts/fragments/LogFragment.java @@ -0,0 +1,50 @@ +package cc.winboll.studio.contacts.fragments; + +/** + * @Author ZhanGSKen@AliYun.Com + * @Date 2025/02/20 12:58:15 + * @Describe 应用日志 + */ +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import cc.winboll.studio.contacts.R; +import cc.winboll.studio.libappbase.LogView; + +public class LogFragment extends Fragment { + + public static final String TAG = "LogFragment"; + + private static final String ARG_PAGE = "ARG_PAGE"; + private int mPage; + + public static LogFragment newInstance(int page) { + Bundle args = new Bundle(); + args.putInt(ARG_PAGE, page); + LogFragment fragment = new LogFragment(); + fragment.setArguments(args); + return fragment; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + if (getArguments() != null) { + mPage = getArguments().getInt(ARG_PAGE); + } + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_log, container, false); + LogView logView = view.findViewById(R.id.logview); + logView.start(); + return view; + } +} diff --git a/contacts/src/main/res/layout/activity_main.xml b/contacts/src/main/res/layout/activity_main.xml index 78d3baa..5376c86 100644 --- a/contacts/src/main/res/layout/activity_main.xml +++ b/contacts/src/main/res/layout/activity_main.xml @@ -2,6 +2,7 @@ @@ -11,34 +12,16 @@ android:layout_height="wrap_content" android:id="@+id/activitymainToolbar1"/> - + android:id="@+id/activitymainViewPager1"/> - - - - - - - - - + diff --git a/contacts/src/main/res/layout/fragment_call.xml b/contacts/src/main/res/layout/fragment_call.xml new file mode 100644 index 0000000..1b8673c --- /dev/null +++ b/contacts/src/main/res/layout/fragment_call.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + diff --git a/contacts/src/main/res/layout/fragment_contacts.xml b/contacts/src/main/res/layout/fragment_contacts.xml new file mode 100644 index 0000000..aeec420 --- /dev/null +++ b/contacts/src/main/res/layout/fragment_contacts.xml @@ -0,0 +1,15 @@ + + + + + + diff --git a/contacts/src/main/res/layout/fragment_log.xml b/contacts/src/main/res/layout/fragment_log.xml new file mode 100644 index 0000000..7636182 --- /dev/null +++ b/contacts/src/main/res/layout/fragment_log.xml @@ -0,0 +1,12 @@ + + + + diff --git a/winboll-shared/build.properties b/winboll-shared/build.properties index d1c9e68..e0bef68 100644 --- a/winboll-shared/build.properties +++ b/winboll-shared/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Thu Feb 20 03:27:00 GMT 2025 +#Thu Feb 20 06:57:14 GMT 2025 stageCount=0 libraryProject=winboll-shared baseVersion=1.0 publishVersion=1.0.0 -buildCount=91 +buildCount=98 baseBetaVersion=1.0.1