O trecho que está dando erro, está assim pois você não pode colocar as instruções direto naquele local.
Você vai ter que colocar ele dentro do construtor da sua classe OnDragListener
public OnDragListener() {
// o put fica em vermelho dizendo que não consegue resolver o symbolo put
fromTo.put(area5, area2);
fromTo.put(area4, area1);
fromTo.put(area6, area3);
}
Além disso, vi que você está declarando myOnDragListener como um atributo da classe. Até aí ok, mas a definição dele não vai poder ser naquele local, pois você precisará acessar as variáveis area1/area2/area3.../area6 e elas ainda não estarão criadas.
Então separe a declaração da definição da classe.
Passo 1: Apenas declare o atributo:
OnDragListener myOnDragListener;
Passo 2: Antes de usá-lo, ainda em onCreate, defina ele (nesse ponto as variáveis area1/.../area6 já existem):
myOnDragListener = new OnDragListener() {
// TODO O RESTO DO SEU CÓDIGO DO ONDRAGLISTENER AQUI
};
Depois de fazer isso tudo, sugiro fazer um refactoring da sua classe.
Em segunda-feira, 18 de julho de 2016 22:06:28 UTC-3, Luciano Amarante escreveu:
Olá Leandro.Vc esta certo sobre o problema de área x e área y.Mas tentei realizar a sua logica de negócios mas não tive sucesso ou não consegui realizar.. estou perdido...o código fonte ficou assimpackage com.amarante.autista;
import java.util.HashMap;
import java.util.Map;
import android.support.v7.app.AppCompatActivity;
import android.text.method.ScrollingMovementMethod;
import android.content.ClipData;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.view.DragEvent;
import android.view.View;
import android.view.View.DragShadowBuilder;
import android.view.View.OnDragListener;
import android.view.View.OnLongClickListener;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
LinearLayout area1, area2, area3, area4, area5, area6;
TextView prompt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main );
area1 = (LinearLayout) findViewById(R.id.area1);
area2 = (LinearLayout) findViewById(R.id.area2);
area3 = (LinearLayout) findViewById(R.id.area3);
area4 = (LinearLayout) findViewById(R.id.area4);
area5 = (LinearLayout) findViewById(R.id.area5);
area6 = (LinearLayout) findViewById(R.id.area6);
prompt = (TextView) findViewById(R.id.prompt);
// make TextView scrollable
prompt.setMovementMethod(new ScrollingMovementMethod());
//clear prompt area if LongClick
prompt.setOnLongClickListener(new OnLongClickListener(){
@Override
public boolean onLongClick(View v) {
prompt.setText("");
return true;
}});
TypedArray arrayResources = getResources().obtainTypedArray(
R.array.resicon);
for (int i = 0; i < arrayResources.length(); i++) {
ImageView imageView = new ImageView(this);
imageView.setImageDrawable(arrayResources.getDrawable(i)) ;
imageView.setOnLongClickListener(myOnLon gClickListener );
area4.addView(imageView);
//area5.addView(imageView);
//area6.addView(imageView);
}
for (int i = 0; i < arrayResources.length(); i++) {
ImageView imageView = new ImageView(this);
imageView.setImageDrawable(arrayResources.getDrawable(i)) ;
imageView.setOnLongClickListener(myOnLon gClickListener );
//area4.addView(imageView);
area5.addView(imageView);
//area6.addView(imageView);
}
for (int i = 0; i < arrayResources.length(); i++) {
ImageView imageView = new ImageView(this);
imageView.setImageDrawable(arrayResources.getDrawable(i)) ;
imageView.setOnLongClickListener(myOnLon gClickListener );
//area4.addView(imageView);
//area5.addView(imageView);
area6.addView(imageView);
}
arrayResources.recycle();
area1.setOnDragListener(myOnDragListener );
area2.setOnDragListener(myOnDragListener );
area3.setOnDragListener(myOnDragListener );
area4.setOnDragListener(myOnDragListener );
area5.setOnDragListener(myOnDragListener );
area6.setOnDragListener(myOnDragListener );
}
OnLongClickListener myOnLongClickListener = new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
ClipData data = ClipData.newPlainText("", "");
DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v);
v.startDrag(data, shadowBuilder, v, 0);
//v.setVisibility(View.INVISIBLE); //v.startDragAndDrop(data, shadowBuilder, v, 0);
return true;
}
};
OnDragListener myOnDragListener = new OnDragListener() {
// Defina variáveis para guardar a view de origem e de destino
View from;
View to;
private boolean checkIfDropIsOK() {
// o fromTo fica em vermelho
View possibleFrom = fromTo.get(to);
return from.equals(possibleFrom);
}
// Mantenha um mapa com os casos possíveis
// o a Map<View> esta pedindo 2 argumentos
Map<View> fromTo = new HashMap<View, View>();
// o put fica em vermelho dizendo que não consegue resolver o symbolo put
fromTo.put(area5, area2);
fromTo.put(area4, area1);
fromTo.put(area6, area3);
@Override
public boolean onDrag(View v, DragEvent event) {
final int action = event.getAction();
String area;
if (v == area1){
area = "area1";
}else if (v == area2){
area = "area2";
}else if (v == area3){
area = "area3";
}else if (v == area4){
area = "area4";
}else if (v == area5){
area = "area5";
}else if (v == area6){
area = "area6";
}else {
area = "unknown";
}
switch (action) {
case DragEvent.ACTION_DRAG_STARTED:
prompt.append("ACTION_DRAG_STARTED: " + area + "\n");
from = v;
break;
case DragEvent.ACTION_DRAG_ENTERED:
prompt.append("ACTION_DRAG_ENTERED: " + area + "\n");
break;
case DragEvent.ACTION_DRAG_EXITED:
prompt.append("ACTION_DRAG_EXITED: " + area + "\n");
break;
case DragEvent.ACTION_DROP:
to = v;
boolean dropOk = checkIfDropIsOK();
if (dropOk){
prompt.append("ACTION_DROP_2: " + area + "\n");
View view = (View)event.getLocalState();
LinearLayout oldParent = (LinearLayout)view.getParent();
oldParent.removeView(view);
LinearLayout newParent = (LinearLayout)v;
newParent.addView(view);
}else{
// nao tenho certezareturn false;}
break;
case DragEvent.ACTION_DRAG_ENDED:
prompt.append("ACTION_DRAG_ENDED: " + area + "\n");
default:
break;
}
return true;
}
};
}Grato pela ajuda.mas estou sem saída.Att.Luciano.
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.






0 comentários:
Postar um comentário