欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android高仿2048小游戲?qū)崿F(xiàn)代碼

 更新時(shí)間:2016年10月19日 09:59:32   作者:Json_Jerry  
這篇文章主要介紹了Android高仿2048小游戲?qū)崿F(xiàn)代碼的相關(guān)資料,非常不錯(cuò)具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

剛開(kāi)始進(jìn)入Splash界面:

1.SplashActivity.Java(兩秒后進(jìn)入開(kāi)始界面,Splash界面的布局只有一個(gè)圖片,在博客后,會(huì)展示給大家看)

public class SplashActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
new Thread(new Runnable() { 
@Override
public void run() {
try {
Thread.sleep(2000);
Intent intent=new Intent(SplashActivity.this, LoginActivity.class);
startActivity(intent);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finish();
}
}).start();
}
}

2.LoginActivity(登陸界面)

private Button btn1,btn2;
private EditText etAcount,etPassword;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
initView();
}
private void initView() {
btn1=(Button) findViewById(R.id.btn_login);
btn2=(Button) findViewById(R.id.btn_register);
etAcount=(EditText) findViewById(R.id.et_account);
etPassword=(EditText) findViewById(R.id.et_pwd);
btn1.setOnClickListener(new OnClickListener() {
//登錄按鈕的監(jiān)聽(tīng)
@Override
public void onClick(View v) {
SharedPreferences sharedPreferences=getSharedPreferences("user", MODE_PRIVATE);
String number=sharedPreferences.getString("number", "");
int a,b;
if (number=="") {
a=0;//記錄用戶個(gè)數(shù)
}else {
a=Integer.parseInt(number);
}
String account;
String password;
for (b=0;b<a;b++) {
account="account"+b;
password="password"+b;
String jname=sharedPreferences.getString(account,"");
String jpwd=sharedPreferences.getString(password, "");
if (jname.equals(etAcount.getText().toString())||jpwd.equals(etPassword.getText().toString())) {
if (jname.equals(etAcount.getText().toString())&&jpwd.equals(etPassword.getText().toString())) {
finish();
Intent intent=new Intent(LoginActivity.this, MainActivity.class);
startActivity(intent);
break;
}else if (jname.equals(etAcount.getText().toString())) {
Toast.makeText(LoginActivity.this, "密碼錯(cuò)誤", Toast.LENGTH_SHORT).show(); 
}
}
}
if (b==a) {
Toast.makeText(LoginActivity.this, "用戶未注冊(cè)", Toast.LENGTH_SHORT).show();
}
}
});
//注冊(cè)按鈕的監(jiān)聽(tīng)
btn2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String account;
String password;
SharedPreferences sharedPreferences=getSharedPreferences("user",MODE_PRIVATE);
String number=sharedPreferences.getString("number", "");
int a;
int b;
if (number=="") {
a=0;
}else {
a=Integer.parseInt(number);
}
for (b = 0; b <a; b++) {
account="account"+b;
password="password"+b;
String jname=sharedPreferences.getString(account,"");
if (jname.equals(etAcount.getText().toString())) {
break;
}
}
if (b==a) {
if (etAcount.getText().toString().equals("")&&etPassword.getText().toString().equals("")) {
Toast.makeText(LoginActivity.this,"用戶名密碼不能為空", Toast.LENGTH_SHORT).show();
}else {
account="account"+b;
password="password"+b;
a++;
SharedPreferences.Editor editor=sharedPreferences.edit();
editor.putString(account,etAcount.getText().toString());
editor.putString(password,etPassword.getText().toString());
editor.putString("number",a+"");
editor.commit();
Toast.makeText(LoginActivity.this,"注冊(cè)成功", Toast.LENGTH_SHORT).show();
}
}else {
Toast.makeText(LoginActivity.this,"該賬戶已存在", Toast.LENGTH_SHORT).show();
}
}
});
} 
}

LoginActivity的布局如下:

<ImageView
android:id="@+id/img_head"
android:layout_width="match_parent"
android:layout_height="260dp"
android:background="@drawable/head_game" />
<EditText 
android:id="@+id/et_account"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_below="@id/img_head"
android:layout_marginLeft="50dp"
android:layout_marginRight="50dp"
android:layout_marginTop="40dp"
android:background="@drawable/set_charge_top"
android:drawableLeft="@drawable/login_img2"
android:hint="請(qǐng)輸入賬號(hào)" />
<EditText
android:id="@+id/et_pwd"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_below="@id/et_account"
android:layout_marginLeft="50dp"
android:layout_marginTop="10dp"
android:layout_marginRight="50dp"
android:background="@drawable/set_charge_top"
android:drawableLeft="@drawable/login_img3"
android:hint="請(qǐng)輸入密碼" />
<Button 
android:id="@+id/btn_login"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="登錄"
android:layout_below="@id/et_pwd"
android:layout_marginTop="10dp"
android:layout_marginLeft="70dp"/>
<Button 
android:id="@+id/btn_register"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="注冊(cè)"
android:layout_below="@id/et_pwd"
android:layout_toRightOf="@id/btn_login"
android:layout_marginTop="10dp"
android:layout_marginLeft="60dp"/>

3.MainActivity.java(主頁(yè)面)

public class MainActivity extends Activity {
private TextView tvScore;
private Animation animation;
private static MainActivity mainActivity = null;
private int score = 0;
private ImageView imageView;
private GameView gameView;
public static MainActivity getMainActivity() {
return mainActivity;
}
public MainActivity() {
mainActivity = this;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvScore = (TextView) findViewById(R.id.tvScore);
imageView=(ImageView) findViewById(R.id.img_monkey);
}
public void onClick(View view) {
switch (view.getId()) {
case R.id.btn_help://幫助按鈕,彈出對(duì)話框
animation=AnimationUtils.loadAnimation(this,R.anim.anim_monkey);
AlertDialog.Builder dialog2=new AlertDialog.Builder(this);
dialog2.setTitle("嘲諷+藐視");
dialog2.setMessage("這么簡(jiǎn)單的游戲你還要幫助!!你咋不上天呢");
dialog2.setPositiveButton("給我綁個(gè)竄天猴", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
imageView.startAnimation(animation);//為ImageView設(shè)置動(dòng)畫
}
});
dialog2.setNegativeButton("繼續(xù)玩~", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
dialog2.show();
break;
case R.id.btn_quit://退出按鈕的點(diǎn)擊事件
AlertDialog.Builder dialog = new AlertDialog.Builder(this);
dialog.setTitle("提示:");
dialog.setMessage("主人,你真的要離開(kāi)我么?");
dialog.setPositiveButton("確定", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
System.exit(0);
}
});
dialog.setNegativeButton("取消", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
dialog.show();
break;
default:
break;
}
}
public void clearScore() {//清除分?jǐn)?shù)
score = 0;
showScore();
}
public void showScore() {//展示分?jǐn)?shù)
tvScore.setText(score + "");
}
public void addScore(int s) {//添加分?jǐn)?shù)
score += s;
showScore();
}
}

MainActivity的布局文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.jerry.game2048.MainActivity" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:background="#574336"
>
<TextView 
android:layout_marginLeft="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/score"
android:textSize="24sp"
android:textColor="#FFFFFF"
android:textStyle="bold"/>
<TextView 
android:id="@+id/tvScore"
android:textSize="25sp"
android:textColor="#FFFFFF"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
<com.jerry.game2048.GameView
android:id="@+id/gameView"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
></com.jerry.game2048.GameView>
<ImageView 
android:id="@+id/img_monkey"
android:layout_width="60dp"
android:layout_height="60dp"
android:visibility="visible"
android:layout_gravity="center_horizontal"
android:src="@drawable/icon10"
android:scaleType="fitXY"
/>
<LinearLayout
android:id="@+id/ly_btns"
android:layout_marginTop="20dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" 
android:background="#ddada0"
>
<Button 
android:id="@+id/btn_help"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:text="游戲幫助"
android:textSize="20sp"
android:onClick="onClick"/>
<Button 
android:id="@+id/btn_quit"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="退出游戲"
android:layout_marginRight="20dp"
android:textSize="20sp"
android:onClick="onClick"/>
</LinearLayout>
<TextView 
android:layout_width="match_parent"
android:layout_height="40dp"
android:singleLine="true"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:textSize="30sp"
android:background="#000000"
android:textColor="#ffffff"
android:text="這里寫實(shí)際項(xiàng)目中,你所需要添加廣告信息,這是一個(gè)跑馬燈的效果,遇到問(wèn)題,可在本博客下留下郵箱和問(wèn)題,可以為您解答,轉(zhuǎn)載請(qǐng)注明出處,謝謝"/>
</LinearLayout>

4.Card.java(卡片類)

public class Card extends FrameLayout {
private int num=0;
private TextView label;
public Card(Context context) {
super(context);
label=new TextView(getContext()); 
label.setTextSize(32);
label.setGravity(Gravity.CENTER);
label.setBackgroundColor(0x33ffffff);//設(shè)置每個(gè)卡片的顏色
LayoutParams lp=new LayoutParams(-1,-1);//該類用來(lái)初始化layout控件textView里的寬高屬性
lp.setMargins(10, 10, 0, 0);//設(shè)置間隔
addView(label,lp); 
setNum(0);
}
public int getNum() {
return num;
}
public void setNum(int num) { 
this.num=num;
if (num<=0) {
label.setText("");
}else {
label.setText(num+"");
}
}
//重寫equals方法,判斷卡片綁定的數(shù)字是否相等
public boolean equals(Card o) {
return getNum()==o.getNum();
} 
}

5.GameView.java(主要邏輯)

public class GameView extends GridLayout {
private Card[][] cardsMap = new Card[4][4];
//用來(lái)存放cardsMap下標(biāo)用的Point類的集合
private List<Point> emptyPoints = new ArrayList<Point>();
public GameView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initGameView();
}
public GameView(Context context) {
super(context);
initGameView();
}
public GameView(Context context, AttributeSet attrs) {
super(context, attrs);
initGameView();
}
private void initGameView() {
setColumnCount(4);
setBackgroundColor(0xffddada0);
setOnTouchListener(new OnTouchListener() {
// 添加觸摸事件 開(kāi)始
private float startX, startY, offsetX, offsetY;
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
startX = event.getX();
startY = event.getY();
break;
case MotionEvent.ACTION_UP:
offsetX = event.getX() - startX;// 大于0則代表向右滑
offsetY = event.getY() - startY;// 小于0代表向上滑
if (Math.abs(offsetX) > Math.abs(offsetY)) {
if (offsetX > 5) {
swipeRight();
} else if (offsetX < -5) {
swipeLeft();
}
} else {
if (offsetY > 5) {
swipeDown();
} else if (offsetY < -5) {
swipeUp();
}
}
break;
}
return true;
}
});
}
//根據(jù)卡片寬和高
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
//該方法就是寬高發(fā)生改變的時(shí)候我們可以得到當(dāng)前的寬高是多少 
//該方法也是在游戲一被創(chuàng)建的時(shí)候就調(diào)用,也就是用來(lái)初始寬高的方法
super.onSizeChanged(w, h, oldw, oldh);
//獲取手機(jī)較窄的長(zhǎng)度,-10是用來(lái)間隔每個(gè)卡片的距離,用手機(jī)的寬除以4就是每個(gè)卡片的長(zhǎng)度了
int cardWidth = (Math.min(w, h) - 10) / 4;
addCards(cardWidth, cardWidth);
startGame();
}
//增加卡片,形成4*4的矩陣
private void addCards(int cardWidth, int cardHeight) {
Card c;
for (int y = 0; y < 4; y++) {
for (int x = 0; x < 4; x++) {
c = new Card(getContext());
c.setNum(2);
addView(
c, cardWidth, cardHeight);
//順便把初始化時(shí)新建的卡片存放在新建的二維數(shù)組中
cardsMap[x][y] = c;
}
}
}
//開(kāi)始游戲,初始化16個(gè)card
public void startGame() {
MainActivity.getMainActivity().clearScore();
for (int y = 0; y < 4; y++) {
for (int x = 0; x < 4; x++) {
cardsMap[x][y].setNum(0);
}
}
addRondomNum();
addRondomNum();
}
//判斷游戲結(jié)束
private void endGame(){
boolean isfull=true;//判斷卡片是否鋪滿的標(biāo)志變量
for (int x = 0; x < 4; x++) {
for (int y = 0; y < 4; y++) {
if (cardsMap[x][y].getNum()==0
||(x>0&&cardsMap[x][y].equals(cardsMap[x-1][y]))
||(x<3&&cardsMap[x][y].equals(cardsMap[x+1][y]))
||(y>0&&cardsMap[x][y].equals(cardsMap[x][y-1]))
||(y<3&&cardsMap[x][y].equals(cardsMap[x][y+1]))) {
isfull=false;
break;
}
}
}
if (isfull) {
AlertDialog.Builder dialog=new AlertDialog.Builder(getContext());
dialog.setTitle("Game Over!");
dialog.setMessage("你太菜了!想要再玩一次么?");
dialog.setCancelable(false);
dialog.setPositiveButton("重新開(kāi)始",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
startGame();
}
});
dialog.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
});
dialog.show();
}
}
private void addRondomNum() {
//把這個(gè)point清空,每次調(diào)用添加隨機(jī)數(shù)時(shí)就清空之前的emptyPoints
emptyPoints.clear();
//對(duì)所有的位置進(jìn)行遍歷:即為每個(gè)卡片加上了可以控制的Point 
for (int y = 0; y < 4; y++) {
for (int x = 0; x < 4; x++) {
if (cardsMap[x][y].getNum() <= 0) {
emptyPoints.add(new Point(x, y));
}
}
}
//通過(guò)隨機(jī)的從存放了的Point的List集合里去獲取Card的位置,并給這個(gè)card設(shè)置文本屬性,并且只能存2或
//通過(guò)point對(duì)象來(lái)充當(dāng)下標(biāo)的角色來(lái)控制存放card的二維數(shù)組cardsMap,然后隨機(jī)給定位到的card對(duì)象賦值
Point p = emptyPoints.remove((int) (Math.random() * emptyPoints.size()));
cardsMap[p.x][p.y].setNum(Math.random() > 0.1 ? 2 : 4);
}
//左移
private void swipeLeft() {
boolean add=false;
for (int y = 0; y < 4; y++) { 
for (int x = 0; x < 4; x++) {
for (int x1 = x + 1; x1 < 4; x1++) {
if (cardsMap[x1][y].getNum() > 0) {//除了第一列以外的數(shù),如果存在一個(gè)數(shù)大于0
if (cardsMap[x][y].getNum() <= 0) {//如果左邊沒(méi)有數(shù)
cardsMap[x][y].setNum(cardsMap[x1][y].getNum());//將右邊的數(shù)移到左邊
cardsMap[x1][y].setNum(0);//右邊數(shù)清零
x--;
add=true;
break;
} else if (cardsMap[x][y].equals(cardsMap[x1][y])) {
cardsMap[x][y].setNum(cardsMap[x][y].getNum() * 2);
cardsMap[x1][y].setNum(0);
MainActivity.getMainActivity().addScore(
cardsMap[x][y].getNum());
add=true;
}
break;
}
}
}
}
if (add) {
addRondomNum();
endGame();//判斷是否結(jié)束
}
}
//右移
private void swipeRight() {
boolean add=false;
for (int y = 0; y < 4; y++) {
for (int x = 3; x >= 0; x--) {
for (int x1 = x - 1; x1 >= 0; x1--) {
if (cardsMap[x1][y].getNum() > 0) {
if (cardsMap[x][y].getNum() <= 0) {
cardsMap[x][y].setNum(cardsMap[x1][y].getNum());
cardsMap[x1][y].setNum(0);
x++;
add=true;
break;
} else if (cardsMap[x][y].equals(cardsMap[x1][y])) {
cardsMap[x][y].setNum(cardsMap[x][y].getNum() * 2);
cardsMap[x1][y].setNum(0);
MainActivity.getMainActivity().addScore(
cardsMap[x][y].getNum());
add=true;
}
break;
}
}
}
}
if (add) {
addRondomNum();
endGame();
}
}
private void swipeUp() {
boolean add=false;
for (int x = 0; x < 4; x++) {
for (int y = 0; y < 4; y++) {
for (int y1 = y + 1; y1 < 4; y1++) {
if (cardsMap[x][y1].getNum() > 0) {
if (cardsMap[x][y].getNum() <= 0) {
cardsMap[x][y].setNum(cardsMap[x][y1].getNum());
cardsMap[x][y1].setNum(0);
y--;
add=true;
break;
} else if (cardsMap[x][y].equals(cardsMap[x][y1])) {
cardsMap[x][y].setNum(cardsMap[x][y].getNum() * 2);
cardsMap[x][y1].setNum(0);
MainActivity.getMainActivity().addScore(
cardsMap[x][y].getNum());
add=true;
}
break;
}
}
}
}
if (add) {
addRondomNum();
endGame();
}
}
private void swipeDown() {
boolean add=false;
for (int x = 0; x < 4; x++) {
for (int y = 3; y >= 0; y--) {
for (int y1 = y - 1; y1 >= 0; y1--) {
if (cardsMap[x][y1].getNum() > 0) {
if (cardsMap[x][y].getNum() <= 0) {
cardsMap[x][y].setNum(cardsMap[x][y1].getNum());
cardsMap[x][y1].setNum(0);
y++;
add=true;
break;
} else if (cardsMap[x][y].equals(cardsMap[x][y1])) {
cardsMap[x][y].setNum(cardsMap[x][y].getNum() * 2);
cardsMap[x][y1].setNum(0);
MainActivity.getMainActivity().addScore(
cardsMap[x][y].getNum());
add=true;
}
break;
}
}
}
}
if (add) {
addRondomNum();
endGame();
}
}
}

6.最后不要忘記在清單配置文件中配置信息

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.jerry.game2048"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="17"
android:targetSdkVersion="21" />
<application
android:allowBackup="true"
android:icon="@drawable/game2048"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.jerry.game2048.MainActivity"
android:label="@string/app_name"
//設(shè)置屏幕為豎屏
android:screenOrientation="portrait" >
</activity>
<activity
android:name=".SplashActivity"
android:label="@string/title_activity_splash" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".LoginActivity"
android:label="@string/title_activity_login" >
</activity>
</application>
</manifest>

7.其中的竄天猴的動(dòng)畫效果實(shí)現(xiàn)如下:

在res文件下新建一個(gè)anim文件夾
在anim文件夾下新建一個(gè)anim_monky.xml的布局文件

anim_monky.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="0"
android:toXDelta="40"
android:fromYDelta="0"
android:toYDelta="-5000"
android:duration="4000"/>
<alpha 
android:fromAlpha="1"
android:toAlpha="0"
android:duration="5000"
/>
</set>

效果圖如下:


以上所述是小編給大家介紹的Android高仿2048小游戲?qū)崿F(xiàn)代碼,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Android實(shí)現(xiàn)自定義曲線圖

    Android實(shí)現(xiàn)自定義曲線圖

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)自定義曲線圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • 幾個(gè)Android編程時(shí)需要注意的 web 問(wèn)題

    幾個(gè)Android編程時(shí)需要注意的 web 問(wèn)題

    這篇文章主要介紹了幾個(gè)Android編程時(shí)需要注意的 web 問(wèn)題,需要的朋友可以參考下
    2014-12-12
  • Android自定義View實(shí)現(xiàn)彈幕效果

    Android自定義View實(shí)現(xiàn)彈幕效果

    這篇文章主要為大家詳細(xì)介紹了Android自定義View實(shí)現(xiàn)彈幕效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • AndroidStuio插件開(kāi)發(fā)適用于jetbrains全家桶

    AndroidStuio插件開(kāi)發(fā)適用于jetbrains全家桶

    這篇文章主要介紹了AndroidStuio插件開(kāi)發(fā)適用于jetbrains全家桶,本文通過(guò)實(shí)例給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • android 全屏去掉底部虛擬導(dǎo)航欄的方法

    android 全屏去掉底部虛擬導(dǎo)航欄的方法

    今天小編就為大家分享一篇android 全屏去掉底部虛擬導(dǎo)航欄的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • Android畫圖并保存圖片的具體實(shí)現(xiàn)代碼

    Android畫圖并保存圖片的具體實(shí)現(xiàn)代碼

    這篇文章介紹了在Android中畫圖并保存圖片的實(shí)例,以下是具體的實(shí)現(xiàn)方法,有需要的朋友可以參考一下
    2013-07-07
  • Android中EditText屏蔽第三方輸入法表情的方法示例

    Android中EditText屏蔽第三方輸入法表情的方法示例

    最近在工作終于遇到一個(gè)問(wèn)題,因?yàn)榈谌捷斎敕ū砬榈膯?wèn)題導(dǎo)致Android中TextView的內(nèi)容顯示異常,只能想辦法解決了,下面這篇文章主要記錄了在處理Android中EditText屏蔽第三方輸入法表情的方法,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-01-01
  • Android手機(jī)屏幕px與dp互轉(zhuǎn)的工具類

    Android手機(jī)屏幕px與dp互轉(zhuǎn)的工具類

    今天小編就為大家分享一篇關(guān)于Android手機(jī)屏幕px與dp互轉(zhuǎn)的工具類,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-03-03
  • Flutter 給列表增加下拉刷新和上滑加載更多功能

    Flutter 給列表增加下拉刷新和上滑加載更多功能

    在實(shí)際的 App 中,下拉刷新和上滑加載更多是非常常見(jiàn)的交互形式。在 Flutter 中,有 flutter_easyrefresh開(kāi)源插件用于實(shí)現(xiàn)下拉刷新和上滑加載更多。本篇介紹了有狀態(tài)組件和 flutter_easyrefresh 的基本應(yīng)用,同時(shí)使用模擬的方式完成了異步數(shù)據(jù)加載。
    2021-05-05
  • 解決Android Studio xml 格式化不自動(dòng)換行的問(wèn)題

    解決Android Studio xml 格式化不自動(dòng)換行的問(wèn)題

    這篇文章主要介紹了解決Android Studio xml 格式化不自動(dòng)換行的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-03-03

最新評(píng)論