Iniciando o projeto randomExpressions
Para começar crie um projeto novo.O package name pode ser random.expressions
AndroidManifest.xml
O android:theme é modelo antigo.O ícone vai dentro da pasta res/drawable
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application
android:allowBackup="true"
android:icon="@drawable/icon"
android:label="expressions"
android:theme="@android:style/Theme.Light.NoTitleBar"
android:resizeableActivity="true">
<activity
android:exported="true"
android:name=".MainActivity"
android:label="expressions">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Pasta raw
Dentro da pasta /main/res/ vão 13 imagens e um arquivo html.São arquivos que contêem os pedaços das caras que são sorteadas para serem exibidas na tela.
Extraia e coloque o conteúdo na pasta /main/res/raw/
Webview
O arquivo html contém código css e javascript que misturam as imagens para gerar expressões.Esse arquivo é renderizado em uma webview que é um recurso do desenvolvimento android.
Uma webview é como um pedaço de um navegador. A webview renderiza código html, css e js e exibe dentro do app.
Posteriormente código java tira screenshot da tela html que está renderizada na webview.
Salvando screenshot programaticamente
expressionView.setDrawingCacheEnabled(true);
Bitmap bitmap=Bitmap.createBitmap(expressionView.getDrawingCache());
expressionView.setDrawingCacheEnabled(false);
Intent intent=new Intent("android.intent.action.SEND");
intent.setType("image/jpeg");
intent.putExtra("android.intent.extra.STREAM",Uri.parse(MediaStore.Images.Media.insertImage(getContentResolver(),bitmap,String.valueOf((long)System.currentTimeMillis()),"expression")));
MainActivity.this.startActivity(Intent.createChooser(intent,""));
Esse código faz o app tirar um screenshot quando o user clica no botão.O screenshot é salvo e aparece a opção de compartilhar.
LinearLayout
LinearLayout é um elemento android que posiciona componentes na tela do aplicativo.LinearLayout linearLayout=new LinearLayout(this);
linearLayout.setOrientation(linearLayout.VERTICAL);
Webview
Webview é um pedaço de uma janelinha de um navegador que vai no linearLayout.WebView expressionView=new WebView(this);
expressionView.getSettings().setJavaScriptEnabled(true);
expressionView.loadUrl("file:///android_res/raw/index.htm");
linearLayout.addView(expressionView);
Botão que tira a Screenshot
O Button também é adicionado ao linearLayout.Button button=new Button(this);
button.setText("save");
LinearLayout.LayoutParams lp1=new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.MATCH_PARENT);
lp1.gravity=Gravity.CENTER_HORIZONTAL;
button.setLayoutParams(lp1);
button.setHeight(120);
button.setWidth(220);
button.setOnClickListener(new View.OnClickListener(){public void onClick(View view){
expressionView.setDrawingCacheEnabled(true);
Bitmap bitmap=Bitmap.createBitmap(expressionView.getDrawingCache());
expressionView.setDrawingCacheEnabled(false);
Intent intent=new Intent("android.intent.action.SEND");
intent.setType("image/jpeg");
intent.putExtra("android.intent.extra.STREAM",Uri.parse(MediaStore.Images.Media.insertImage(getContentResolver(),bitmap,String.valueOf((long)System.currentTimeMillis()),"expression")));
MainActivity.this.startActivity(Intent.createChooser(intent,""));
}});
linearLayout.addView(button);
ScrollView
O ScrollView serve para uma situação de quando a tela precisa ser rolada.Nesse caso provavelmente isso não acontece mas existem situações em que há mais elementos no linearLayout e para que o app exiba todos o linearLayout vai dentro da ScrollView.
ScrollView scrollView=new ScrollView(this);
scrollView.setBackgroundColor(new Color().parseColor("#e1e8f0"));
scrollView.addView(linearLayout);
setContentView(scrollView);
O código completo
package random.expressions;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebView;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ScrollView;
import android.graphics.Color;
import android.widget.RelativeLayout.LayoutParams;
import android.view.Gravity;
public class MainActivity extends Activity{
WebView expressionView;
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout linearLayout=new LinearLayout(this);
linearLayout.setOrientation(linearLayout.VERTICAL);
expressionView=new WebView(this);
expressionView.getSettings().setJavaScriptEnabled(true);
expressionView.loadUrl("file:///android_res/raw/index.htm");
linearLayout.addView(expressionView);
Button button=new Button(this);
button.setText("save");
LinearLayout.LayoutParams lp1=new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.MATCH_PARENT);
lp1.gravity=Gravity.CENTER_HORIZONTAL;
button.setLayoutParams(lp1);
button.setHeight(120);
button.setWidth(220);
button.setOnClickListener(new View.OnClickListener(){public void onClick(View view){
expressionView.setDrawingCacheEnabled(true);
Bitmap bitmap=Bitmap.createBitmap(expressionView.getDrawingCache());
expressionView.setDrawingCacheEnabled(false);
Intent intent=new Intent("android.intent.action.SEND");
intent.setType("image/jpeg");
intent.putExtra("android.intent.extra.STREAM",Uri.parse(MediaStore.Images.Media.insertImage(getContentResolver(),bitmap,String.valueOf((long)System.currentTimeMillis()),"expression")));
MainActivity.this.startActivity(Intent.createChooser(intent,""));
}});
linearLayout.addView(button);
ScrollView scrollView=new ScrollView(this);
scrollView.setBackgroundColor(new Color().parseColor("#e1e8f0"));
scrollView.addView(linearLayout);
setContentView(scrollView);
}
}
Arquivos do Projeto
O app expressions é baseado em webview.Nesse app o código java gera uma imagem png a partir do layout de uma página exibida na tela e disponibiliza para o usuário a opção de compartilhar.