立項(xiàng)依據(jù)(項(xiàng)目背景及研究現(xiàn)狀500字以內(nèi))
???通過網(wǎng)上問卷等形式做了前期調(diào)研,網(wǎng)上問卷由問卷星提供技術(shù)支持,共有348份答卷,問卷鏈接為很抱歉,此問卷(12931895)已暫停,不能填寫!。
(1)通過調(diào)查發(fā)現(xiàn):79%的學(xué)生認(rèn)為通過APP做題強(qiáng)化預(yù)習(xí)效果是比較有效的一種預(yù)習(xí)方式,并對(duì)此表示贊成;
(2)通過走訪調(diào)查及和實(shí)驗(yàn)課老師交流發(fā)現(xiàn),實(shí)驗(yàn)教材的更新速度跟不上實(shí)驗(yàn)儀器更新的速度,對(duì)同學(xué)的學(xué)習(xí)造成了一定影響;
(3)調(diào)查發(fā)現(xiàn),70%的學(xué)生在課堂看老師實(shí)驗(yàn)操作演示時(shí)只能記住部分內(nèi)容,90%的學(xué)生認(rèn)為把老師錄制的實(shí)驗(yàn)操作視頻上傳到APP對(duì)他們有幫助。所以可以嘗試在APP上增加視頻教學(xué)模塊,用于上傳實(shí)驗(yàn)操作類、課外延伸類等教學(xué)視頻,幫助這些學(xué)生順利地完成實(shí)驗(yàn);
(4)調(diào)查顯示,89%學(xué)生都支持APP提供數(shù)據(jù)表格,95%的學(xué)生支持增加數(shù)據(jù)智能處理及時(shí)反饋功能。他們?cè)u(píng)價(jià)說,該功能可以改變以往報(bào)告交上去后不能及時(shí)知道結(jié)果對(duì)錯(cuò)的情況,幫助他們更好的發(fā)現(xiàn)問題和出錯(cuò)的地方,使自己不斷進(jìn)步。
? 對(duì)于這些長(zhǎng)期困擾物理實(shí)驗(yàn)課程教學(xué)的問題以及大多數(shù)同學(xué)的期望,有望通過引入現(xiàn)代信息技術(shù),深化物理實(shí)驗(yàn)課程教學(xué)模式的改革,以移動(dòng)學(xué)習(xí)技術(shù)輔助大學(xué)物理實(shí)驗(yàn)課程教學(xué)等方法逐步解決。
項(xiàng)目?jī)?nèi)容、研究方法、創(chuàng)新點(diǎn)、預(yù)期成果(2000字以內(nèi))
一、項(xiàng)目?jī)?nèi)容:基于遼寧科技大學(xué)大物實(shí)驗(yàn)實(shí)際教學(xué)情況和調(diào)查問卷的統(tǒng)計(jì)結(jié)果,開發(fā)一款能夠在學(xué)習(xí)、評(píng)價(jià)、教學(xué)、網(wǎng)絡(luò)基礎(chǔ)設(shè)施和教育生產(chǎn)力等方面發(fā)揮輔助作用的教育類APP,以及結(jié)合本校的實(shí)際運(yùn)營(yíng)效果探索出教育類APP的較好的實(shí)踐模式。具體開發(fā)內(nèi)容主要包括以下幾個(gè)方面:
(1)UI和原型設(shè)計(jì)。
(2)app功能開發(fā)和服務(wù)器開發(fā)。
(3)app后臺(tái)管理系統(tǒng)開發(fā)。
(4)app測(cè)試。
(5)app主流應(yīng)用平臺(tái)上架。
(6)app運(yùn)營(yíng)和維護(hù),整理資料并發(fā)表研究論文。
- 研究方法:(1)調(diào)查法。初期已通過網(wǎng)上問卷等形式調(diào)查了遼寧科技大學(xué)學(xué)生們對(duì)大物實(shí)驗(yàn)這種教育類APP的觀點(diǎn)、態(tài)度、建議及功能需求等相關(guān)情況,然后用統(tǒng)計(jì)分析的數(shù)據(jù)指導(dǎo)實(shí)際的開發(fā)過程,這樣以大多數(shù)同學(xué)的需求為導(dǎo)向,開發(fā)出來的軟件更有實(shí)用價(jià)值。軟件測(cè)試、運(yùn)營(yíng)、迭代等階段也會(huì)通過問卷、走訪等形式進(jìn)行調(diào)查。
通過Axure工具進(jìn)行UI和原型設(shè)計(jì)。通過Android studio和Xcode開發(fā)相應(yīng)版本的APP功能。使用rudy開發(fā)后臺(tái)管理系統(tǒng)。結(jié)合整個(gè)開發(fā)實(shí)例發(fā)表研究論文。
三、創(chuàng)新點(diǎn):(1)通過教育類APP探索新的預(yù)習(xí)模式。嘗試改變以前只寫預(yù)習(xí)報(bào)告的單一預(yù)習(xí)模式,在APP中增添預(yù)習(xí)資料和相應(yīng)的練習(xí)題,強(qiáng)化預(yù)習(xí)效果。
(2)通過教育類APP整合教學(xué)資源。在APP上有機(jī)地整合大物實(shí)驗(yàn)各種資料,并通過發(fā)布老師教學(xué)所用的實(shí)驗(yàn)課件等資源來創(chuàng)造性地解決實(shí)驗(yàn)課本的更新速度跟不上實(shí)驗(yàn)儀器更新的速度的問題。
(3)依托教育類APP的線上線下相結(jié)合學(xué)習(xí)和教學(xué)模式的創(chuàng)新。嘗試通過APP和課堂這種有創(chuàng)造性的線上線下相結(jié)合的學(xué)習(xí)和教學(xué)模式,推進(jìn)教育事業(yè)更快更好向前發(fā)展。這也無疑是互聯(lián)網(wǎng)加教育的偉大創(chuàng)新,對(duì)其他任何學(xué)科的教改都有很大的借鑒價(jià)值。
(4)通過教育類APP探索成績(jī)考核的新模式。嘗試改變傳統(tǒng)的以實(shí)驗(yàn)報(bào)告為主體的考核模式,在APP上增加做練習(xí)題、測(cè)試題、觀看操作視頻等多元的考核方式,全面考核同學(xué)們的學(xué)習(xí)效果和學(xué)習(xí)能力,為培養(yǎng)綜合性、創(chuàng)新性人才奠定了基礎(chǔ)。
四、預(yù)期成果:(1)實(shí)現(xiàn)APP使用學(xué)號(hào)進(jìn)行登錄的功能。
(2)實(shí)現(xiàn)APP做練習(xí)題的功能。
(3)實(shí)現(xiàn)APP做限時(shí)測(cè)試的功能。
(4)實(shí)現(xiàn)在APP上發(fā)布教學(xué)所用的實(shí)驗(yàn)課件等資源的功能
(5)實(shí)現(xiàn)APP視頻教學(xué)模塊。
(6)實(shí)現(xiàn)在APP上提供數(shù)據(jù)表格和自助數(shù)據(jù)處理功能。
(7)在主流應(yīng)用平臺(tái)上架所開發(fā)的APP。
(8)APP用戶數(shù)超過1500人。
(9)整理相關(guān)資料數(shù)據(jù),總結(jié)教育類APP的研究和實(shí)踐過程,并發(fā)表研究論文。
第一階段(2017年4月),確定APP設(shè)計(jì)方案。
2、第二階段(2017年5~6月),UI和原型設(shè)計(jì)。
3、第三階段(2017年7~9月),app功能開發(fā)和構(gòu)建服務(wù)器。
4、第四階段(2017年10~11月),app后臺(tái)管理系統(tǒng)開發(fā)。
5、第五階段(2018年12月),app測(cè)試。
6、第六階段(2018年1月),app主流應(yīng)用平臺(tái)上架。
7、第七階段(2018年2~3月),app運(yùn)營(yíng)和維護(hù),整理資料并發(fā)表研究論文
總費(fèi)用預(yù)計(jì)為15000元,明細(xì)如下:?
? 1.?資料費(fèi)3000元:包括書籍、軟件、打印費(fèi)用等?
???2.?應(yīng)用開發(fā)費(fèi)10000元:包括存儲(chǔ)資料用移動(dòng)硬盤、構(gòu)建服務(wù)器等費(fèi)用。 ????????????????
???3.?版面費(fèi)2000元:用于發(fā)表論文。
項(xiàng)目指導(dǎo)教師意見 使用APP輔助大學(xué)物理實(shí)驗(yàn)教學(xué),可以使物理實(shí)驗(yàn)課程教學(xué)更加多樣化,有效的加強(qiáng)了學(xué)生對(duì)大學(xué)物理實(shí)驗(yàn)的理解和學(xué)習(xí)。這種讓互聯(lián)網(wǎng)與傳統(tǒng)教學(xué)模式進(jìn)行深度融合的學(xué)習(xí)模式,充分發(fā)揮學(xué)習(xí)內(nèi)容微型化、學(xué)習(xí)終端靈活化的優(yōu)勢(shì),實(shí)現(xiàn)高校學(xué)生按需學(xué)習(xí)、高效學(xué)習(xí)和快樂學(xué)習(xí)的理想,可使參與學(xué)生的自主學(xué)習(xí)能力有明顯的提高,同時(shí)也讓教師真正做到因材施教,給學(xué)生更大的學(xué)習(xí)空間,彌補(bǔ)了實(shí)驗(yàn)課程教學(xué)時(shí)間不足的問題。 通過學(xué)生參與開發(fā),有利于培養(yǎng)學(xué)生綜合運(yùn)用多學(xué)科知識(shí)解決實(shí)際問題能力,提高創(chuàng)新意識(shí)和創(chuàng)新能力,開發(fā)學(xué)生潛能、調(diào)動(dòng)學(xué)生學(xué)習(xí)積極性。 故而推薦該大創(chuàng)項(xiàng)目。? |
部分開發(fā)筆記(draft)
目錄
部分開發(fā)筆記(draft) 1
一、注冊(cè)與登錄 1
1.1注冊(cè)界面布局 1
1.2注冊(cè)功能代碼 5
1.3登錄界面布局 7
1.4登錄功能代碼 11
二、 主界面(消息、實(shí)驗(yàn)、我) 13
2.1主界面布局及效果圖 13
2.2主界面代碼 18
三、課件、視頻、題庫(kù) 29
2.3課件布局及效果圖 29
2.4課件功能代碼 30
2.5視頻模塊效果圖 31
2.6視頻模塊代碼 31
2.7題庫(kù)界面布局 31
2.8 從相冊(cè)或拍照選擇頭像并裁剪成方形代碼 33
2.9數(shù)據(jù)處理模塊效果圖 36
四、其他 36
2.8應(yīng)用于題庫(kù)的手勢(shì)滑動(dòng)切題的Demo代碼 3639一、注冊(cè)與登錄
1.1注冊(cè)界面布局
<?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_register"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context="com.xy.classspace.Register"><android.support.v7.widget.Toolbarandroid:id="@+id/toolbar"android:layout_width="match_parent"android:layout_height="40dp"android:background="?attr/colorPrimary"><!--添加Toolbar的子控件--><TextViewandroid:id="@+id/tv_title"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_gravity="center"android:gravity="center"android:text="注冊(cè)"android:textColor="#FFFFFF"android:textSize="20sp" /></android.support.v7.widget.Toolbar><LinearLayoutandroid:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="70dp"><FrameLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentTop="true"android:padding="4dp"android:layout_alignParentEnd="false"android:layout_alignParentRight="false"tools:layout_alignBottom="@+id/et_login_phone"android:paddingTop="10dp"android:id="@+id/frameLayout3"><ImageViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:src="@android:drawable/ic_menu_myplaces"android:id="@+id/user_id_icon"android:layout_gravity="bottom"/></FrameLayout><EditTextandroid:layout_width="match_parent"android:layout_height="match_parent"android:ems="10"android:id="@+id/user_id"tools:layout_height="wrap_content"tools:layout_toRightOf="@+id/frameLayout"tools:layout_width="wrap_content"android:layout_centerVertical="true"android:layout_alignParentRight="true"android:layout_alignParentEnd="true"android:layout_alignParentLeft="true"android:layout_alignParentStart="true" /></RelativeLayout><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="70dp"><FrameLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentTop="true"android:padding="4dp"android:layout_alignParentEnd="false"android:layout_alignParentRight="false"tools:layout_alignBottom="@+id/et_login_phone"android:paddingTop="10dp"android:background="@android:drawable/ic_lock_lock"android:id="@+id/frameLayout2"><ImageViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:src="@android:drawable/ic_lock_lock"android:id="@+id/user_pass_icon"android:layout_gravity="bottom"/></FrameLayout><EditTextandroid:layout_width="match_parent"android:layout_height="match_parent"android:inputType="textPassword"android:ems="10"android:id="@+id/user_pass"tools:layout_height="wrap_content"tools:layout_toRightOf="@+id/frameLayout"tools:layout_width="wrap_content"android:layout_centerVertical="true"android:layout_alignParentRight="true"android:layout_alignParentEnd="true"android:layout_alignParentLeft="true"android:layout_alignParentStart="true" /></RelativeLayout><Buttonandroid:layout_marginTop="10dp"android:text="注冊(cè)"android:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/register_button" /></LinearLayout>
</LinearLayout>1.2注冊(cè)功能代碼
注冊(cè)并將賬號(hào)和密碼上傳到服務(wù)器的代碼:
package com.xy.classspace;import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;import cn.bmob.v3.BmobUser;
import cn.bmob.v3.exception.BmobException;
import cn.bmob.v3.listener.SaveListener;public class Register extends AppCompatActivity {public EditText username,password;private SharedPreferences preferences;private SharedPreferences.Editor editor;
private Toolbar mToolbar;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_register);setTitle("");mToolbar= (Toolbar) findViewById(R.id.toolbar);setSupportActionBar(mToolbar);getSupportActionBar().setDisplayHomeAsUpEnabled(true);mToolbar.setNavigationOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {finish();}});preferences=getSharedPreferences("lkdwlsyxz1",MODE_PRIVATE);editor=preferences.edit();Button register= (Button) findViewById(R.id.register_button);username= (EditText) this.findViewById(R.id.user_id);password = (EditText)this.findViewById(R.id.user_pass);/* register.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(Register.this,"用戶名密碼不能為空",Toast.LENGTH_SHORT).show();}});*/register.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if(username.getText().toString().trim().length()==0||password.getText().toString().trim().length()==0){Toast.makeText(getApplicationContext(),"用戶名密碼不能為空",Toast.LENGTH_SHORT).show();}else{BmobUser bu = new BmobUser();bu.setUsername(username.getText().toString());bu.setPassword(password.getText().toString());// bu.setEmail("sendi@163.com");
//注意:不能用save方法進(jìn)行注冊(cè)bu.signUp(new SaveListener<MyUser>() {@Overridepublic void done(MyUser s, BmobException e) {if(e==null){// toast("注冊(cè)成功:" +s.toString());editor.putString("user_id",username.getText().toString());editor.putString("user_pass",password.getText().toString());editor.commit();Toast.makeText(getApplicationContext(),"注冊(cè)成功",Toast.LENGTH_LONG).show();Intent intent=new Intent(Register.this,LoginActivity.class);startActivity(intent);}else{Toast.makeText(getApplicationContext(),"用戶名已存在",Toast.LENGTH_LONG).show();}}});}}});}
}1.3登錄界面布局
1、登錄界面布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"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"tools:context="com.xy.classspace.LoginActivity"><android.support.v7.widget.Toolbarandroid:id="@+id/toolbar"android:layout_width="match_parent"android:layout_height="40dp"android:background="?attr/colorPrimary"><!--添加Toolbar的子控件--><Buttonandroid:id="@+id/btn_register"android:layout_width="60dp"android:layout_height="wrap_content"android:layout_gravity="right"android:background="@color/colorPrimary"android:text="注冊(cè)"android:textColor="#faf7f7"android:textSize="11sp" /><TextViewandroid:id="@+id/tv_title"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_gravity="center"android:gravity="center"android:text="登錄"android:textColor="#FFFFFF"android:textSize="20sp" /></android.support.v7.widget.Toolbar><LinearLayoutandroid:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_alignParentTop="true"android:layout_alignParentLeft="true"android:layout_alignParentStart="true"><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="70dp"tools:background="@android:color/background_light"><FrameLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentTop="true"android:padding="4dp"android:layout_alignParentEnd="false"android:layout_alignParentRight="false"tools:layout_alignBottom="@+id/et_login_phone"android:paddingTop="10dp"android:id="@+id/frameLayout3"><ImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"app:srcCompat="@android:drawable/ic_menu_myplaces"android:id="@+id/user_id_icon"android:layout_gravity="bottom"/></FrameLayout><EditTextandroid:layout_width="match_parent"android:layout_height="match_parent"android:ems="10"android:id="@+id/user_id"tools:layout_height="wrap_content"tools:layout_toRightOf="@+id/frameLayout"tools:layout_width="wrap_content"android:layout_alignBottom="@+id/frameLayout3"android:layout_alignParentRight="true"android:layout_alignParentEnd="true"android:layout_toRightOf="@+id/frameLayout3"android:layout_toEndOf="@+id/frameLayout3" /></RelativeLayout><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="70dp"><FrameLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentTop="true"android:padding="4dp"android:layout_alignParentEnd="false"android:layout_alignParentRight="false"tools:layout_alignBottom="@+id/et_login_phone"android:paddingTop="10dp"android:id="@+id/frameLayout2"><ImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@android:drawable/ic_lock_lock"android:id="@+id/user_pass_icon"android:layout_gravity="bottom"/></FrameLayout><EditTextandroid:layout_width="match_parent"android:layout_height="match_parent"android:inputType="textPassword"android:ems="10"android:id="@+id/user_pass"tools:layout_height="wrap_content"tools:layout_toRightOf="@+id/frameLayout"tools:layout_width="wrap_content"android:layout_alignBottom="@+id/frameLayout2"android:layout_alignParentRight="true"android:layout_alignParentEnd="true"android:layout_toRightOf="@+id/frameLayout2"android:layout_toEndOf="@+id/frameLayout2" /></RelativeLayout><Buttonandroid:layout_marginTop="10dp"android:text="登錄"android:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/login_button" /></LinearLayout>
</LinearLayout>1.4登錄功能代碼
從服務(wù)器獲取密碼比較并登錄的邏輯代碼:
public class LoginActivity extends AppCompatActivity {public EditText username,password;private SharedPreferences preferences;private SharedPreferences.Editor editor;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_login);Bmob.initialize(this, "44cda0a720e34234f77ed0d27214baaf");BmobUser bmobUser =BmobUser.getCurrentUser();if(bmobUser!=null){Intent intent=new Intent(LoginActivity.this,Main3Activity.class);startActivity(intent);finish();}Button login= (Button) findViewById(R.id.login_button);Button register= (Button) findViewById(R.id.btn_register);username= (EditText) this.findViewById(R.id.user_id);password = (EditText)this.findViewById(R.id.user_pass);preferences=getSharedPreferences("lkdwlsyxz1",MODE_PRIVATE);editor=preferences.edit();login.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {String user_id=preferences.getString("user_id",null);String user_pass=preferences.getString("user_pass",null);/* if((username.getText().toString().trim().equals(user_id)) && (password.getText().toString().trim().equals(user_pass))){Intent intent=new Intent(LoginActivity.this,Main3Activity.class);startActivity(intent);}else{Toast.makeText(LoginActivity.this,"用戶名或密碼錯(cuò)誤",Toast.LENGTH_SHORT).show();}*/BmobUser bu2 = new BmobUser();bu2.setUsername(username.getText().toString());bu2.setPassword(password.getText().toString());bu2.login(new SaveListener<BmobUser>() {@Overridepublic void done(BmobUser bmobUser, BmobException e) {if(e==null){Toast.makeText(getApplicationContext(),"登錄成功:",Toast.LENGTH_LONG).show();//通過BmobUser user = BmobUser.getCurrentUser()獲取登錄成功后的本地用戶信息//如果是自定義用戶對(duì)象MyUser,可通過MyUser user = BmobUser.getCurrentUser(MyUser.class)獲取自定義用戶信息Intent intent=new Intent(LoginActivity.this,Main3Activity.class);startActivity(intent);}else{Toast.makeText(getApplicationContext(),e.getMessage(),Toast.LENGTH_LONG).show();}}});}});register.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent=new Intent(LoginActivity.this,Register.class);startActivity(intent);}});}
}二、主界面(消息、實(shí)驗(yàn)、我)
2.1主界面布局及效果圖2、主界面布局代碼:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:background="#7EC0EE"android:paddingLeft="20dp"android:text="實(shí)驗(yàn)教學(xué)"android:textColor="#F0FFF0"android:textSize="20dp"/></LinearLayout><TabHostandroid:id="@android:id/tabhost"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_weight="1"><!--引用android系統(tǒng)已有的id--><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><FrameLayoutandroid:id="@android:id/tabcontent"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_weight="1"><!--消息頁面--><LinearLayoutandroid:id="@+id/tab01"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><ListViewandroid:id="@+id/listviewMessage"android:layout_width="match_parent"android:layout_height="wrap_content"></ListView></LinearLayout><!-- 班級(jí)頁面--><LinearLayoutandroid:id="@+id/tab02"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><ExpandableListViewandroid:id="@+id/listviewDWSY"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="10dp"></ExpandableListView></LinearLayout><!-- 我的頁面--><LinearLayoutandroid:id="@+id/tab03"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:orientation="horizontal"><ImageViewandroid:id="@+id/touxiang"android:layout_width="60dp"android:layout_height="60dp"android:layout_marginLeft="18dp"android:layout_marginTop="10dp"android:src="@drawable/touxiang" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="15dp"android:paddingTop="25dp"android:text="Mr.yu"android:textSize="20sp" /></LinearLayout><Viewandroid:layout_width="match_parent"android:layout_height="1dp"android:background="#DEDEDE"></View><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:orientation="horizontal"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="10dp"android:padding="10dp"android:text="個(gè)性簽名"android:textSize="18sp" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:paddingTop="10dp"android:text="#2017#讓自己累一點(diǎn)"android:textSize="15sp"/></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="10dp"android:padding="10dp"android:text="學(xué)號(hào)"android:textSize="18sp" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:paddingTop="10dp"android:text="1201636036"android:textSize="20sp" /></LinearLayout><Viewandroid:layout_width="match_parent"android:layout_height="1dp"android:background="#DEDEDE"></View><ListViewandroid:id="@+id/listview_me"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="10dp"></ListView><Buttonandroid:id="@+id/button"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="#7EC0EE"android:text="退出登錄"android:textColor="#F7F7F7" /></LinearLayout></FrameLayout><TabWidgetandroid:id="@android:id/tabs"android:layout_width="match_parent"android:layout_height="wrap_content"></TabWidget></LinearLayout></TabHost>
</LinearLayout>2.2主界面代碼
4.1、主界面功能邏輯代碼
package com.xy.classspace;import android.app.AlertDialog;
import android.app.TabActivity;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.Button;
import android.widget.ExpandableListView;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TabHost;
import android.widget.TextView;
import android.widget.Toast;import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;/*import xiaocool.net.classspace.ClassAlbum.ClassAlbumActivity;
import xiaocool.net.classspace.ClassBlog.ClassBlogActivity;
import xiaocool.net.classspace.Homework.Homework;*//*** Created by MRYU on 2015/3/7.*/
public class Main3Activity extends TabActivity {private Button mAddImage;private Bitmap mBitmap;protected static final int CHOOSE_PICTURE = 0;protected static final int TAKE_PICTURE = 1;protected static Uri tempUri;private static final int CROP_SMALL_PICTURE = 2;private ImageView touxiang;private TabHost tabHost;// private ListView listViewMessage, listViewClass, listViewMe;private ListView listViewMessage,listViewMe;private ExpandableListView dwsy;/*** 消息界面數(shù)據(jù)*/private String titleMessage[] = {"李四", "張和", "吳曦", "劉偉"};private int[] head_iconMessage = new int[]{R.drawable.touxiang, R.drawable.touxiang,R.drawable.touxiang, R.drawable.touxiang};private String[] descMessage = new String[]{"消息功能開發(fā)中", "消息功能開發(fā)中","消息功能開發(fā)中", "消息功能開發(fā)中"};private String[] timeMessage = new String[]{"2017/5/7 17:56", "2017/5/16 17:56","2017/5/7 17:56", "2017/16 17:56"};/*** 實(shí)驗(yàn)界面數(shù)據(jù)*/private String groups[] = {"霍爾效應(yīng)", "固體導(dǎo)熱系數(shù)", "表面張力","牛頓環(huán)", "油滴實(shí)驗(yàn)", "干涉實(shí)驗(yàn)", "熱電偶"};private String[][] childs={{"練習(xí)題","實(shí)驗(yàn)課件","調(diào)試小視頻","數(shù)據(jù)處理"},{"練習(xí)題","實(shí)驗(yàn)課件","調(diào)試小視頻","數(shù)據(jù)處理"},{"練習(xí)題","實(shí)驗(yàn)課件","實(shí)驗(yàn)操作視頻","數(shù)據(jù)處理"},{"練習(xí)題","實(shí)驗(yàn)課件","實(shí)驗(yàn)操作視頻","數(shù)據(jù)處理"},{"練習(xí)題","實(shí)驗(yàn)課件","實(shí)驗(yàn)操作視頻","數(shù)據(jù)處理"},{"練習(xí)題","實(shí)驗(yàn)課件","實(shí)驗(yàn)操作視頻","數(shù)據(jù)處理"},{"練習(xí)題","實(shí)驗(yàn)課件","實(shí)驗(yàn)操作視頻","數(shù)據(jù)處理"}};private int groupicons[] = new int[]{R.drawable.img_public_acc_head, R.drawable.img_class_roster_head, R.drawable.img_news_head,R.drawable.img_blog_head, R.drawable.img_video_head, R.drawable.img_album_head, R.drawable.img_home_work_head};private int[][] childicons={{R.mipmap.yuxi,R.mipmap.kj,R.mipmap.caozuo,R.mipmap.sjcl}};/*** 我的界面數(shù)據(jù)*/private String[] titleMe = new String[]{"清空聊天記錄", "檢查更新", "關(guān)于小站", "設(shè)置"};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main3);touxiang= (ImageView) findViewById(R.id.touxiang);touxiang.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {showChoosePicDialog();}});listViewMessage = (ListView) this.findViewById(R.id.listviewMessage);dwsy = (ExpandableListView) this.findViewById(R.id.listviewDWSY);listViewMe = (ListView) this.findViewById(R.id.listview_me);//獲取tabhost組件TabHost tabHost=getTabHost();//創(chuàng)建第一個(gè)Tab頁TabHost.TabSpec tab1 = tabHost.newTabSpec("tab1").setIndicator("消息")//設(shè)置標(biāo)題.setContent(R.id.tab01);//添加第一個(gè)tab頁tabHost.addTab(tab1);TabHost.TabSpec tab2 = tabHost.newTabSpec("tab2").setIndicator("全部實(shí)驗(yàn)")//設(shè)置標(biāo)題.setContent(R.id.tab02);//添加第一個(gè)tab頁tabHost.addTab(tab2);TabHost.TabSpec tab3 = tabHost.newTabSpec("tab3").setIndicator("我")//設(shè)置標(biāo)題.setContent(R.id.tab03);//添加第一個(gè)tab頁tabHost.addTab(tab3);/*** 我的界面*/List<Map<String, Object>> listitemsMe = new ArrayList<Map<String, Object>>();for (int i = 0; i < titleMe.length; i++) {Map<String, Object> listitemMe = new HashMap<String, Object>();listitemMe.put("title", titleMe[i]);listitemsMe.add(listitemMe);}//SimpleAdapter adapterMe = new SimpleAdapter(this, listitemsMe,R.layout.me_item,new String[]{"title"},new int[]{R.id.textview_me});listViewMe.setAdapter(adapterMe);/*** 填充我的消息界面*/List<Map<String, Object>> listitems = new ArrayList<Map<String, Object>>();for (int i = 0; i < titleMessage.length; i++) {Map<String, Object> listitem = new HashMap<String, Object>();listitem.put("title", titleMessage[i]);listitem.put("head_icon", head_iconMessage[i]);listitem.put("desc", descMessage[i]);listitem.put("time", timeMessage[i]);listitems.add(listitem);}SimpleAdapter adapterMessage = new SimpleAdapter(this, listitems,R.layout.message_item,new String[]{"title", "head_icon", "desc", "time"},new int[]{R.id.title, R.id.imageview_message, R.id.desc, R.id.time});listViewMessage.setAdapter(adapterMessage);/*** 填充班級(jí)界面*/dwsy.setAdapter(new MyExpandableListView());dwsy.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {@Overridepublic boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {switch (groupPosition){case 0:switch (childPosition){case 1:Intent intent=new Intent(Main3Activity.this,WebView.class);startActivity(intent);break;case 2:Uri uri=Uri.parse("http://flashmedia.eastday.com/newdate/news/2016-11/shznews1125-19.mp4");Intent niurou=new Intent(Intent.ACTION_VIEW);niurou.setDataAndType(uri,"video/mp4");startActivity(niurou);break;default:Toast.makeText(getApplicationContext(),"研發(fā)中.....",Toast.LENGTH_SHORT).show();break;}break;case 1:switch (childPosition){case 1:Intent intent=new Intent(Main3Activity.this,WebView2.class);startActivity(intent);break;case 2:Uri uri=Uri.parse("http://112.253.22.157/17/z/z/y/u/zzyuasjwufnqerzvyxgkuigrkcatxr/hc.yinyuetai.com/D046015255134077DDB3ACA0D7E68D45.flv");Intent music=new Intent(Intent.ACTION_VIEW);// Log.v("URl-----------------",uri.toString());music.setDataAndType(uri,"video/mp4");startActivity(music);break;default:Toast.makeText(getApplicationContext(),"研發(fā)中.....",Toast.LENGTH_SHORT).show();break;}break;default:Toast.makeText(getApplicationContext(),"研發(fā)中.....",Toast.LENGTH_SHORT).show();break;}Toast.makeText(getApplicationContext(),"研發(fā)中.....",Toast.LENGTH_SHORT).show();return true;}});}/* private List<Map<String, Object>> getData(){List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();for (int i=0;i<groups.length;i++){Map<String,Object> map=new HashMap<String,Object>();map.put("title",groups[i]);map.put("img",groupicons[i]);list.add(map);}return list;}*///為ExpandableListView自定義適配器class MyExpandableListView extends BaseExpandableListAdapter {//返回一級(jí)列表的個(gè)數(shù)@Overridepublic int getGroupCount() {return groups.length;}//返回每個(gè)二級(jí)列表的個(gè)數(shù)@Overridepublic int getChildrenCount(int groupPosition) { //參數(shù)groupPosition表示第幾個(gè)一級(jí)列表// Log.d("smyhvae", "-->" + groupPosition);return childs[groupPosition].length;}//返回一級(jí)列表的單個(gè)item(返回的是對(duì)象)@Overridepublic Object getGroup(int groupPosition) {return groups[groupPosition];}//返回二級(jí)列表中的單個(gè)item(返回的是對(duì)象)@Overridepublic Object getChild(int groupPosition, int childPosition) {return childs[groupPosition][childPosition]; //不要誤寫成groups[groupPosition][childPosition]}@Overridepublic long getGroupId(int groupPosition) {return groupPosition;}@Overridepublic long getChildId(int groupPosition, int childPosition) {return childPosition;}//每個(gè)item的id是否是固定?一般為true@Overridepublic boolean hasStableIds() {return true;}//【重要】填充一級(jí)列表@Overridepublic View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {if (convertView == null) {convertView = getLayoutInflater().inflate(R.layout.item_group, null);}ImageView iv_group = (ImageView) convertView.findViewById(R.id.iv_group);TextView tv_group = (TextView) convertView.findViewById(R.id.tv_group);iv_group.setImageResource(groupicons[groupPosition]);tv_group.setText(groups[groupPosition]);return convertView;}//【重要】填充二級(jí)列表@Overridepublic View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {if (convertView == null) {convertView = getLayoutInflater().inflate(R.layout.item_child, null);}ImageView iv_child = (ImageView) convertView.findViewById(R.id.iv_child);TextView tv_child = (TextView) convertView.findViewById(R.id.tv_child);iv_child.setImageResource(childicons[0][childPosition]);tv_child.setText(childs[groupPosition][childPosition]);return convertView;}//二級(jí)列表中的item是否能夠被選中?可以改為true@Overridepublic boolean isChildSelectable(int groupPosition, int childPosition) {return true;}}/*** 顯示修改圖片的對(duì)話框*/protected void showChoosePicDialog() {AlertDialog.Builder builder = new AlertDialog.Builder(Main3Activity.this);builder.setTitle("添加圖片");String[] items = { "選擇本地照片", "拍照" };builder.setNegativeButton("取消", null);builder.setItems(items, new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {switch (which) {case CHOOSE_PICTURE: // 選擇本地照片Intent openAlbumIntent = new Intent(Intent.ACTION_GET_CONTENT);openAlbumIntent.setType("image/*");//用startActivityForResult方法,待會(huì)兒重寫onActivityResult()方法,拿到圖片做裁剪操作startActivityForResult(openAlbumIntent, CHOOSE_PICTURE);break;case TAKE_PICTURE: // 拍照Intent openCameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);tempUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "temp_image.jpg"));// 將拍照所得的相片保存到SD卡根目錄openCameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, tempUri);startActivityForResult(openCameraIntent, TAKE_PICTURE);break;}}});builder.show();}@Overridepublic void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if (resultCode == MainActivity.RESULT_OK) {switch (requestCode) {case TAKE_PICTURE:cutImage(tempUri); // 對(duì)圖片進(jìn)行裁剪處理break;case CHOOSE_PICTURE:cutImage(data.getData()); // 對(duì)圖片進(jìn)行裁剪處理break;case CROP_SMALL_PICTURE:if (data != null) {setImageToView(data); // 讓剛才選擇裁剪得到的圖片顯示在界面上}break;}}}/*** 裁剪圖片方法實(shí)現(xiàn)*/protected void cutImage(Uri uri) {if (uri == null) {Log.i("alanjet", "The uri is not exist.");}tempUri = uri;Intent intent = new Intent("com.android.camera.action.CROP");//com.android.camera.action.CROP這個(gè)action是用來裁剪圖片用的intent.setDataAndType(uri, "image/*");// 設(shè)置裁剪intent.putExtra("crop", "true");// aspectX aspectY 是寬高的比例intent.putExtra("aspectX", 1);intent.putExtra("aspectY", 1);// outputX outputY 是裁剪圖片寬高intent.putExtra("outputX", 150);intent.putExtra("outputY", 150);intent.putExtra("return-data", true);startActivityForResult(intent, CROP_SMALL_PICTURE);}/*** 保存裁剪之后的圖片數(shù)據(jù)*/protected void setImageToView(Intent data) {Bundle extras = data.getExtras();if (extras != null) {mBitmap = extras.getParcelable("data");//這里圖片是方形的,可以用一個(gè)工具類處理成圓形(很多頭像都是圓形,這種工具類網(wǎng)上很多不再詳述)touxiang.setImageBitmap(mBitmap);//顯示圖片//在這個(gè)地方可以寫上上傳該圖片到服務(wù)器的代碼,后期將單獨(dú)寫一篇這方面的博客,敬請(qǐng)期待...}}三、課件、視頻、題庫(kù)
2.3課件布局及效果圖<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/activity_web_view2"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="com.xy.classspace.WebView2"><WebViewandroid:id="@+id/KJWV2"android:layout_width="match_parent"android:layout_height="match_parent"></WebView>
</RelativeLayout>2.4課件功能代碼
package com.xy.classspace;import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;public class WebView2 extends AppCompatActivity {private android.webkit.WebView wv;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_web_view2);wv= (android.webkit.WebView) findViewById(R.id.KJWV2);wv.getSettings().setJavaScriptEnabled(true);//wv.setScrollBarStyle(0);WebSettings webSettings = wv.getSettings();webSettings.setAllowFileAccess(true);webSettings.setBuiltInZoomControls(true);wv.loadUrl("http://c.xiumi.us/board/v5/2lT28/32041137");wv.setWebChromeClient(new WebChromeClient() {@Overridepublic void onProgressChanged(android.webkit.WebView view, int newProgress) {if (newProgress == 100) {WebView2.this.setTitle("固體導(dǎo)熱系數(shù)的測(cè)量");} else {WebView2.this.setTitle("加載中.......");}}});}
}2.5視頻模塊效果圖2.6視頻模塊代碼Uri uri=Uri.parse("http://112.253.22.157/17/z/z/y/u/zzyuasjwufnqerzvyxgkuigrkcatxr/hc.yinyuetai.com/D046015255134077DDB3ACA0D7E68D45.flv");Intent music=new Intent(Intent.ACTION_VIEW);
// Log.v("URl-----------------",uri.toString());music.setDataAndType(uri,"video/mp4");startActivity(music);2.7題庫(kù)界面布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/activity_huoer__tiku"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="com.xy.classspace.HUOER_TIKU"><TextViewandroid:id="@+id/diyiti"android:text="第一題 負(fù)效應(yīng)有"android:textSize="20dp"android:layout_width="match_parent"android:layout_height="wrap_content" />
<RadioGroupandroid:layout_width="match_parent"android:layout_height="match_parent"><RadioButtonandroid:id="@+id/B"android:layout_width="match_parent"android:layout_height="141dp"android:text="BBBBB"/><RadioButtonandroid:id="@+id/A"android:layout_width="match_parent"android:layout_height="150dp"android:text="A AAAAA"/><RadioButtonandroid:id="@+id/C"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="CCCC"/><RadioButtonandroid:id="@+id/D"android:layout_width="match_parent"android:layout_height="90dp"android:text="DDDDD"/></RadioGroup>
</RelativeLayout>2.8 從相冊(cè)或拍照選擇頭像并裁剪成方形代碼
/*** 顯示修改圖片的對(duì)話框*/
protected void showChoosePicDialog() {AlertDialog.Builder builder = new AlertDialog.Builder(Main3Activity.this);builder.setTitle("添加圖片");String[] items = { "選擇本地照片", "拍照" };builder.setNegativeButton("取消", null);builder.setItems(items, new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {switch (which) {case CHOOSE_PICTURE: // 選擇本地照片Intent openAlbumIntent = new Intent(Intent.ACTION_GET_CONTENT);openAlbumIntent.setType("image/*");//用startActivityForResult方法,待會(huì)兒重寫onActivityResult()方法,拿到圖片做裁剪操作startActivityForResult(openAlbumIntent, CHOOSE_PICTURE);case TAKE_PI break;
CTURE: // 拍照Intent openCameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);tempUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "temp_image.jpg"));// 將拍照所得的相片保存到SD卡根目錄openCameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, tempUri);startActivityForResult(openCameraIntent, TAKE_PICTURE);break;}}});builder.show();
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if (resultCode == MainActivity.RESULT_OK) {switch (requestCode) {case TAKE_PICTURE:cutImage(tempUri); // 對(duì)圖片進(jìn)行裁剪處理break;case CHOOSE_PICTURE:cutImage(data.getData()); // 對(duì)圖片進(jìn)行裁剪處理break;case CROP_SMALL_PICTURE:if (data != null) {setImageToView(data); // 讓剛才選擇裁剪得到的圖片顯示在界面上}break;}}
}
/*** 裁剪圖片方法實(shí)現(xiàn)*/
protected void cutImage(Uri uri) {if (uri == null) {Log.i("alanjet", "The uri is not exist.");}tempUri = uri;Intent intent = new Intent("com.android.camera.action.CROP");//com.android.camera.action.CROP這個(gè)action是用來裁剪圖片用的intent.setDataAndType(uri, "image/*");// 設(shè)置裁剪intent.putExtra("crop", "true");// aspectX aspectY 是寬高的比例intent.putExtra("aspectX", 1);intent.putExtra("aspectY", 1);// outputX outputY 是裁剪圖片寬高intent.putExtra("outputX", 150);intent.putExtra("outputY", 150);intent.putExtra("return-data", true);startActivityForResult(intent, CROP_SMALL_PICTURE);
}
/*** 保存裁剪之后的圖片數(shù)據(jù)*/
protected void setImageToView(Intent data) {Bundle extras = data.getExtras();if (extras != null) {mBitmap = extras.getParcelable("data");//這里圖片是方形的,可以用一個(gè)工具類處理成圓形(很多頭像都是圓形,這種工具類網(wǎng)上很多不再詳述)touxiang.setImageBitmap(mBitmap);//顯示圖片//在這個(gè)地方可以寫上上傳該圖片到服務(wù)器的代碼,后期將單獨(dú)寫一篇這方面的博客,敬請(qǐng)期待...}
}2.9數(shù)據(jù)處理模塊效果圖四、其他
2.8應(yīng)用于題庫(kù)的手勢(shì)滑動(dòng)切題的Demo代碼
所用知識(shí)點(diǎn)為Viewflipper和GestureDetectorpackage com.diabin.viewflipper;import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.widget.ViewFlipper;import static com.diabin.viewflipper.R.id.flipper;public class MainActivity extends AppCompatActivity {
private ViewFlipper viewFlipper;private GestureDetector mdetector;/*** Called when a touch screen event was not handled by any of the views* under it. This is most useful to process touch events that happen* outside of your window bounds, where there is no view to receive it.** @param event The touch screen event being processed.* @return Return true if you have consumed the event, false if you haven't.* The default implementation always returns false.*/@Overridepublic boolean onTouchEvent(MotionEvent event) {return mdetector.onTouchEvent(event);}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);viewFlipper= (ViewFlipper) findViewById(flipper);mdetector=new GestureDetector(this, new GestureDetector.OnGestureListener() {@Overridepublic boolean onDown(MotionEvent e) {return false;}@Overridepublic void onShowPress(MotionEvent e) {}@Overridepublic boolean onSingleTapUp(MotionEvent e) {return false;}@Overridepublic boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {return false;}@Overridepublic void onLongPress(MotionEvent e) {}@Overridepublic boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {final float FLING_MIN_DISTANCE = 100;//最小滑動(dòng)像素final float FLING_MIN_VELOCITY = 150;//最小滑動(dòng)速度if(e1.getX() - e2.getX() > FLING_MIN_DISTANCE &&Math.abs(velocityX) > FLING_MIN_VELOCITY){//X軸上的移動(dòng)速度去絕對(duì)值進(jìn)行比較//判斷x軸坐標(biāo)如果第一次按下時(shí)的坐標(biāo)減去第二次離開屏幕時(shí)的坐標(biāo)大于我們?cè)O(shè)置的位移,因?yàn)橐粋€(gè)控件的原點(diǎn)是在左上角,就說明此時(shí)是向左滑動(dòng)的viewFlipper.showNext();//顯示下一個(gè)視圖}else if(e2.getX() - e1.getX() > FLING_MIN_DISTANCE &&Math.abs(velocityX) > FLING_MIN_VELOCITY){//判斷x軸坐標(biāo)如果第二次離開屏幕時(shí)的坐標(biāo)減去第一次按下時(shí)的坐標(biāo)大于我們?cè)O(shè)置的位移,因?yàn)橐粋€(gè)控件的原點(diǎn)是在左上角,就說明此時(shí)是向右滑動(dòng)的viewFlipper.showPrevious();//顯示上一個(gè)視圖}return true;}});}}未完待續(xù) 。。。。。。。。。。。
總結(jié)
以上是生活随笔為你收集整理的[省级大创项目]教育类APP的探索和实践——大学物理实验助手APP开发的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。