日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android表白app

發布時間:2025/3/8 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android表白app 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、前言

  馬上就要520和521了,是不是還有像我一樣的單身狗啊。我就知道有,所以這兩天簡單寫了這個小程序(其實是替別人寫的),雖然我并不會用去騙女孩子(因為最近太忙了,實習完之后要搞畢設,要搞論文啊,誰能幫幫我...),但是我想很多人肯定會感興趣吧。如果你感興趣就拿去逗妹子一樂吧。

  如果你很感興趣,你可以在我寫的基礎上增輝加彩,或者根據我提供的資源自己動手,嘗試一下。

二、先show一下效果

?  

?

三、Android手機如何錄制屏幕及轉GIF

  https://www.aswifter.com/2015/07/10/android-record-video-to-gif/

  

  第一次試的時候沒有成功,第二次設定屏幕分辨率后成功了,但是效果太差。果斷又試了第三次,成功了,手機根目錄出現了剛剛錄制的視屏文件。

  adb pull 會把文件從手機上復制到本地(ANDROID_SDK_HOME/platform-tools目錄下,也就是adb.exe所在的目錄)

  接著就是轉換成gif了,這里我用PS處理

  

    

   然后文件——》存儲為web所有格式——》選擇gif。如果gif過大,可能會導致ps崩潰,簡單的做法就是調整圖片的大小,就可以了。

四、下載地址

  apk文件:https://github.com/hjzgg/LoveDemo/tree/master/bin

  項目:https://github.com/hjzgg/LoveDemo

五、技術路線,分享我的制作過程

1.準備

  大二的時候搞過一段時間的android,時隔一年半,好多東西都忘了,不過現在撿起來也不晚。

  開發工具使用eclipse或者android studio。我使用的eclipse,那么就要自己去安裝ADT和SDK了,安裝的時間有點蛋疼啊。

2.資源收集

  作為一個表白程序,必須要有圖片吧,文字吧, 最好加上背景音樂吧,不然就真的沒有意思了。下面分享幾個資源鏈接:

  文字特效:?https://github.com/elevenetc/TextSurface

  圖片切花特效:?https://github.com/daimajia/AndroidImageSlider

  音樂播放器:?http://www.cnblogs.com/TerryBlog/archive/2010/06/26/1765910.html

  

  先說一下文字特效,將文字特效的代碼下載下來后,所有的演示代碼放在了\app\src\main\java\su\levenetc\android\textsurface\sample\checks這里面,app\src\main\java\su\levenetc\android\textsurface\sample\SampleActivity.java是app入口activity。最主要的代碼放在了library目錄下,需要將library\src\main下面的文件復制到我們的項目中,參考入口activity的內容進行調用就可以了。?資源中提供了很多文字展示的效果,本人愚鈍,只用了兩個,而且用的不是太好。我主要增加了文字處理,效果結合的功能。將要展示的文字按照4句劃分,然后調用文字效果展示。文字資源放在了assets文件夾下面。

  圖片切換特效很好用,進本不要改動,直接把圖片換了就行了,效果不錯。

  音樂播放器引用網上的一位哥們兒的,寫的簡介靠譜,這里直接拿來用了,用的是MediaPlayer進行音樂播放。我改了一些地方,里面有點兒小bug。增加了一個功能,就是在sd卡不存在的時候(無論是內置的還是外置的),依然可以獲取到音樂文件,考慮了好多方式,比如直接調用網上的,或者調用手機內存中的...,想了想還是將音樂文件放在項目當中了,可以放在res/raw下,也可以放在assets下,各有好處,本人放在了res/raw目錄下。還有一個要注意的是判斷手機的sd卡環境是否可以使用。具體的還是看代碼吧。

3.主要代碼

  說了這么多,最主要的代碼都是在一個activity中,代碼如下:

  MainActivity.java

public class MainActivity extends ListActivity implements BaseSliderView.OnSliderClickListener{@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//初始化圖片切換 initChangePicture();//初始化音樂 initMusic();//初始化文字展示 initWord();}@Overridepublic void onSliderClick(BaseSliderView slider) {Toast.makeText(this, slider.getBundle().get("extra") + "",Toast.LENGTH_SHORT).show();}private SliderLayout mDemoSlider;private void initChangePicture(){mDemoSlider = (SliderLayout)findViewById(R.id.slider);//兩種方式加載數據//加載本地HashMap<String,String> url_maps = new HashMap<String, String>();url_maps.put("GitOnWay", "http://gitonway.blog.163.com/");//加載網絡HashMap<String,Integer> file_maps = new HashMap<String, Integer>();file_maps.put("love-A",R.drawable.a);file_maps.put("love-B",R.drawable.b);file_maps.put("love-C",R.drawable.c);file_maps.put("love-D", R.drawable.d);for(String name : file_maps.keySet()){TextSliderView textSliderView = new TextSliderView(this);// 初始化幻燈片頁面 textSliderView.description(name).image(file_maps.get(name)).setOnSliderClickListener(this);//添加要傳遞的數據 textSliderView.getBundle().putString("extra",name);mDemoSlider.addSlider(textSliderView);}// 幻燈片切換方式 mDemoSlider.setPresetTransformer(SliderLayout.Transformer.Accordion); // 指示符位置 mDemoSlider.setPresetIndicator(SliderLayout.PresetIndicators.Center_Bottom); // 定義指示器樣式 // mDemoSlider.setCustomIndicator(your view); // 幻燈片循環 // mDemoSlider.startAutoCycle(); // 停止循環 mDemoSlider.stopAutoCycle(); // 設置指示器的顯示與否 mDemoSlider.setIndicatorVisibility(PagerIndicator.IndicatorVisibility.Visible); // 設置幻燈片的轉化時間 // mDemoSlider.setSliderTransformDuration(5000, null); // 用來自定義幻燈片標題的顯示方式 mDemoSlider.setCustomAnimation(new DescriptionAnimation()); // 幻燈片切換時間 mDemoSlider.setDuration(3000);// 實現隨機切換TimerTask task = new TimerTask() {@Overridepublic void run() {Transformer[] tranformers = SliderLayout.Transformer.values();Transformer transformer = tranformers[(int) (Math.random() * tranformers.length)];mDemoSlider.setPresetTransformer(transformer);}};new Timer().schedule(task, 2000, 2000);}//res/raw中的音樂文件資源映射private Map<String, Integer> musicPath;//播放對象private MediaPlayer myMediaPlayer;//播放列表private List<String> myMusicList = new ArrayList<String>();//當前播放歌曲的索引private int currentListItem=0;//音樂的路徑, 如果存在sd卡,則使用sd卡,否則使用內存中的data目錄private static String MUSIC_PATH = hasSDCardMounted() ? new String(Environment.getExternalStorageDirectory().getAbsolutePath() + "/hjz/"): null;private void initMusic(){myMediaPlayer=new MediaPlayer();findView();musicList();listener();//自動播放第一首歌if(myMusicList.size() > 0){playMusic(MUSIC_PATH, myMusicList.get(currentListItem));}}public static boolean hasSDCardMounted() {String state = Environment.getExternalStorageState();if (state != null && state.equals(Environment.MEDIA_MOUNTED)) {return true;} else {return false;}}//綁定音樂private void musicList(){try {File home = new File(MUSIC_PATH);//如果有sd卡,但是sd卡中沒有指定的音樂文件夾,則采用項目中的音樂文件if(MUSIC_PATH == null || home.listFiles() == null) {//綁定 res/raw下的音樂文件MUSIC_PATH = null;musicPath = new HashMap<String, Integer>();musicPath.put("楊宗緯 - 一次就好.mp3", R.raw.yi_ci_jiu_hao);musicPath.put("霍建華,趙麗穎 - 不可說.mp3", R.raw.bu_ke_shuo);musicPath.put("川井憲次 - 孤獨な巡禮.mp3", R.raw.gu_du_xun_li);myMusicList.addAll(musicPath.keySet());} else {Log.v("MUSIC_PATH", MUSIC_PATH);if(home.listFiles(new MusicFilter()).length>0){for(File file:home.listFiles(new MusicFilter())){myMusicList.add(file.getName());}}}if(myMusicList.size() > 0) {ArrayAdapter<String> musicList = new ArrayAdapter<String>(MainActivity.this, R.layout.musicitme, myMusicList);setListAdapter(musicList);}} catch (Exception e) {Log.e("獲取音樂文件出錯:", e.toString());}}//獲取按鈕void findView(){viewHolder.start=(Button)findViewById(R.id.start);viewHolder.stop=(Button)findViewById(R.id.stop);viewHolder.next=(Button)findViewById(R.id.next);viewHolder.pause=(Button)findViewById(R.id.pause);viewHolder.last=(Button)findViewById(R.id.last);}//監聽事件void listener(){//停止viewHolder.stop.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubif(myMediaPlayer.isPlaying()){myMediaPlayer.reset();}}});//開始viewHolder.start.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {if(myMusicList.size() == 0) return;playMusic(MUSIC_PATH, myMusicList.get(currentListItem));}});//下一首viewHolder.next.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {nextMusic();}});//暫停viewHolder.pause.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {if(myMusicList.size() == 0) return;if(myMediaPlayer.isPlaying()){myMediaPlayer.pause();}else{myMediaPlayer.start();}}});//上一首viewHolder.last.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {lastMusic();}});}//播放音樂 void playMusic(String basePath, String path){try { if(basePath != null) {myMediaPlayer.reset();myMediaPlayer.setDataSource(basePath+path);myMediaPlayer.prepare();} else {myMediaPlayer.pause();myMediaPlayer.release();myMediaPlayer = MediaPlayer.create(MainActivity.this, musicPath.get(path));}myMediaPlayer.start();myMediaPlayer.setOnCompletionListener(new OnCompletionListener() {@Overridepublic void onCompletion(MediaPlayer mp) {nextMusic();}});} catch (Exception e) {Log.e("播放sd卡音樂失敗", e.toString());e.printStackTrace();}}//下一首void nextMusic(){if(myMusicList.size() > 0) {if(++currentListItem>=myMusicList.size()){currentListItem=0;}playMusic(MUSIC_PATH, myMusicList.get(currentListItem));}}//上一首void lastMusic(){if(myMusicList.size() > 0) {if(currentListItem!=0) {playMusic(MUSIC_PATH, myMusicList.get(--currentListItem));} else{playMusic(MUSIC_PATH, myMusicList.get(currentListItem=myMusicList.size()-1));}}}//當用戶返回時結束音樂并釋放音樂對象 @Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {if(keyCode==KeyEvent.KEYCODE_BACK){myMediaPlayer.stop();myMediaPlayer.release();this.finish();return true;}return super.onKeyDown(keyCode, event);}//當選擇列表項時播放音樂 @Overrideprotected void onListItemClick(ListView l, View v, int position, long id) {currentListItem=position;playMusic(MUSIC_PATH, myMusicList.get(currentListItem));}//初始化文字展示private TextSurface textSurface;private void initWord(){LinearLayout layout = (LinearLayout) findViewById(R.id.LinearLayoutWord);//找到你要設透明背景的layout 的id layout.getBackground().setAlpha(60);//0~255透明度值 textSurface = (TextSurface) findViewById(R.id.text_surface);textSurface.postDelayed(new Runnable() {@Override public void run() {show();}}, 1000);}private void show() {textSurface.reset();List<AnimationsSet> animationsSets = new ArrayList<AnimationsSet>();animationsSets.add(CookieThumperSample.getCookieThumperAnimations(getAssets()));animationsSets.addAll(SlideSample.getSlideAnimations(getContents()));textSurface.play(TYPE.SEQUENTIAL, animationsSets.toArray(new AnimationsSet[]{}));// ColorSample.play(textSurface); // AlignSample.play(textSurface); // Rotation3DSample.play(textSurface); // ScaleTextSample.run(textSurface); // ShapeRevealLoopSample.play(textSurface); // ShapeRevealSample.play(textSurface); // SlideSample.play(textSurface); // SurfaceScaleSample.play(textSurface); // SurfaceTransSample.play(textSurface); }private List<String> getContents(){List<String> contents = new ArrayList<String>();try{ //得到資源中的asset數據流 String fileName = "content.txt"; //文件名字 String res=""; InputStream in = getResources().getAssets().open(fileName); int length = in.available(); byte [] buffer = new byte[length]; in.read(buffer); in.close(); res = EncodingUtils.getString(buffer, "UTF-8");String[] strings = res.split("[,|,|\\.|。]");int len = strings.length/4 * 4;for(int i=0; i < len; ++i)contents.add(strings[i]);}catch(Exception e){ e.printStackTrace();Log.e("getContents", e.toString());} return contents;} }

  activity_main.xml(頁面布局)

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"xmlns:custom="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context="com.gitonway.androidimagesliderdemo.activity.MainActivity"><LinearLayout android:id="@+id/LinearLayoutPicture"android:orientation="vertical"android:layout_weight="3"android:layout_height="fill_parent"android:layout_width="match_parent"><!-- 圖片切換 --><com.gitonway.androidimagesliderdemo.widget.imageslider.SliderLayoutandroid:id="@+id/slider"android:layout_width="match_parent"android:layout_height="fill_parent"custom:pager_animation="Accordion"custom:auto_cycle="true"custom:indicator_visibility="visible"custom:pager_animation_span="1100"/><!-- <com.gitonway.androidimagesliderdemo.widget.imageslider.Indicators.PagerIndicatorandroid:id="@+id/custom_indicator"android:layout_width="wrap_content"android:layout_height="wrap_content"android:gravity="center"custom:selected_color="#0095BF"custom:unselected_color="#55333333"custom:selected_drawable="@drawable/ic_launcher"custom:shape="oval"custom:selected_padding_left="6dp"custom:selected_padding_right="6dp"custom:unselected_padding_left="2dp"custom:unselected_padding_right="2dp"android:layout_centerHorizontal="true"android:layout_alignParentBottom="true"custom:selected_width="6dp"custom:selected_height="6dp"custom:unselected_width="6dp"custom:unselected_height="6dp"android:layout_marginBottom="20dp"/><com.gitonway.androidimagesliderdemo.widget.imageslider.Indicators.PagerIndicatorandroid:id="@+id/custom_indicator2"style="@style/AndroidImageSlider_Corner_Oval_Orange"android:layout_centerHorizontal="true"android:layout_alignParentBottom="true"android:layout_marginBottom="20dp"/> --></LinearLayout><!-- 文字展現 --><LinearLayout android:id="@+id/LinearLayoutWord"android:layout_weight="3"android:layout_height="fill_parent"android:orientation="vertical"android:background="@android:color/background_dark"android:layout_width="match_parent"><com.textsurface.TextSurfaceandroid:id="@+id/text_surface"android:layout_height="fill_parent"android:layout_width="match_parent"/></LinearLayout><!-- 音樂播放器 --><LinearLayoutandroid:id="@+id/LinearLayoutMusic"android:layout_width="match_parent"android:layout_weight="4"android:layout_height="fill_parent"android:orientation="vertical" ><ListViewandroid:id="@id/android:list"android:layout_width="match_parent"android:layout_weight="1"android:layout_height="fill_parent"android:scrollbars="vertical" /><LinearLayoutandroid:id="@+id/bottomBtn"android:layout_width="match_parent"android:layout_height="60dp"android:gravity="center|center_horizontal|center_vertical"android:orientation="horizontal" ><Button android:id="@+id/last" android:background="@drawable/last"android:layout_width="wrap_content" android:layout_height="wrap_content"></Button><Button android:id="@+id/stop"android:background="@drawable/stop"android:layout_marginLeft="10dp"android:layout_width="wrap_content" android:layout_height="wrap_content"></Button><Button android:id="@+id/start" android:background="@drawable/start"android:layout_marginLeft="10dp"android:layout_width="wrap_content" android:layout_height="wrap_content"></Button><Button android:id="@+id/pause" android:layout_width="wrap_content"android:background="@drawable/pause"android:layout_marginLeft="10dp"android:layout_height="wrap_content"></Button><Button android:id="@+id/next"android:background="@drawable/next"android:layout_marginLeft="10dp"android:layout_width="wrap_content" android:layout_height="wrap_content"></Button></LinearLayout></LinearLayout></LinearLayout>

?

  

轉載于:https://www.cnblogs.com/hujunzheng/p/5510151.html

總結

以上是生活随笔為你收集整理的android表白app的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 我要看18毛片 | 九九久久免费视频 | 特黄1级潘金莲 | 国产麻豆91| 欧美一区二区三区大屁股撅起来 | 色欲AV无码精品一区二区久久 | 色综合图区 | sese国产| 久久久久亚洲av无码专区体验 | 色久综合网 | 日本a级大片 | 激情视频在线免费观看 | 亚洲精品天堂在线 | 亚洲黄色片子 | 怨女1988国语版在线观看高清 | 中出中文字幕 | 一区二区免费视频 | 国产精彩视频一区 | 97色伦97色伦国产欧美空 | 国产亚洲在线观看 | 中文字幕+乱码+中文乱 | 91大奶 | 免费观看成人在线视频 | 欧美人伦| 国产精品无码一本二本三本色 | 男生插女生网站 | 国产免费av片在线 | 中国男人操女人 | 免费观看在线高清 | 熟女一区二区三区四区 | 久久免费少妇高潮99精品 | 日韩一区二区三区视频在线 | 亚洲一区二区三区婷婷 | 色香蕉在线视频 | 123超碰| 无遮挡又爽又刺激的视频 | 日韩黄色免费观看 | 337p日本大胆噜噜噜鲁 | 草草在线免费视频 | 女同性做受全过程动图 | 精品国产乱码久久久久久牛牛 | 免费看黄的网址 | 中文字幕一区二区三区免费 | 日韩av电影网站 | 日本欧美视频 | 色哟哟导航 | 国产精品国产三级国产aⅴ中文 | 精品国产va久久久久久久 | 国产精品久久久久久久久夜色 | 色天堂视频 | 久久人人爽爽 | 麻豆精品一区 | 亚洲伦理久久 | 亚洲乱亚洲乱妇 | 日韩一区二区久久 | 少妇一区二区三区四区 | 四房婷婷 | 台湾av在线 | 久久亚洲AV成人无码国产野外 | 日韩精品久 | 少妇被狂c下部羞羞漫画 | 亚洲无吗一区二区三区 | 国产成人精品亚洲 | 欧美美女性视频 | 亚洲国产精品久久久久爰性色 | 久久久亚洲av波多野结衣 | 1024日韩| 欧美顶级毛片在线播放 | 九九自拍视频 | 久青草免费视频 | 成人手机在线播放 | 91爱爱爱爱| 欧美视频在线免费看 | 亚洲欧美色图视频 | 中文字幕人妻互换av久久 | 91欧美激情一区二区三区成人 | 日韩中文字幕精品视频 | 最近中文字幕无免费 | 久久精品在这里 | fc2成人免费视频 | 青青草综合视频 | 好吊色这里只有精品 | 国产一区二区伦理 | 国产精品久久久久久久久久久久久 | 男男gay同性三级 | 日本视频黄| 337p粉嫩大胆噜噜噜亚瑟影院 | 国产精品一区二区久久国产 | 99视频在线精品免费观看2 | 夜夜摸夜夜操 | 亚洲第一色在线 | av在线在线| 麻豆国产视频 | 国产 欧美 精品 | 狠狠gao| 国产日韩av在线 | 免费在线看黄视频 | 亚洲乱码国产乱码精品精的特点 | 美女av网站|